Yêu cầu thg 7 7, 2018 2:22 SA 566 0 2
  • 566 0 2
0

Tạo function với dynamic parameter trong PHP

Chia sẻ
  • 566 0 2

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


Đã trả lời thg 7 7, 2018 2:51 SA
Đã được chấp nhận
+1

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.

Chia sẻ
Đã trả lời thg 7 7, 2018 8:55 SA
0

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));
}
Chia sẻ
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí