Tạo function với dynamic parameter trong PHP
Chào các bác, em đang code đoạn PHP như sau
while ($row = mysqli_fetch_assoc($data)) {
array_push($arrayData, new Obj($row["level_id"], $row["level_name"]);
}
trong đó "level_id", "level_name" lấy từ mảng $columns = ["level_id", "level_name"];
Giả sử mảng $columns
có value khác, làm thế nào để đoạn code trên dynamic theo $columns
nhỉ các bác. Em đã thử thằng call_user_func_array()
nhưng hàm này cần phải pass all parameters trong khi đoạn code trên của e chỉ cần pass $columns
nên không được.
Em mới newbie nên các bác nói dễ hiểu hoặc có ví dụ demo thì càng tốt. Tks
2 CÂU TRẢ LỜI
Thực sự thì mình vẫn chưa hiểu rõ câu hỏi của bạn lắm Có vẻ như bạn đang hỏi làm thế nào mà có thể thay đổi nội dung mảng $columns
mà không ảnh hưởng đến phần code phía dưới đúng không nhỉ
Nếu vậy, bạn có thể khai báo mảng $columns
, rồi chạy vòng for
với mảng đó thì có lẽ là sẽ được.
Kiểu như:
$columns = ["level_id", "level_name"];
while ($row = mysqli_fetch_assoc($data)) {
$data = [];
foreach ($columns as $column) {
$data = $row[$column];
}
array_push($arrayData, new Obj($data)); // Truyền cả mảng $data vào trong constructor của class Obj của bạn
}
Với đoạn code như trên thì bạn có đổi tên các trường trong mảng $columns
, hay thêm trường mới, xoá trường cũ thì cũng không ảnh hưởng gì đến xử lý phía dưới.
Có điều bạn cũng cần phải chỉnh sửa lại cả constructor
của class Obj
của bạn nữa, để nó cũng nhận vào một mảng dynamic, thay vì fix cứng thứ tự level_id
hay level_name
như code hiện tại.
Mình nghĩ nếu thay đổi, bạn có thể pass thẳng $row
cho Obj, đồng thời sửa lại Obj constructor:
while ($row = mysqli_fetch_assoc($data)) {
array_push($arrayData, new Obj($row));
}