2010-03-31 23 views
5

Tôi đang xây dựng hệ thống tạo khuôn mẫu và tôi đang gặp sự cố với chức năng gọi điện khi đang di chuyển.Vượt qua các mảng liên kết trong call_user_func_array (...)

Khi tôi thử như sau:

$args = array(
    4, 
    'test' => 'hello', 
    'hi' 
); 

Bạn biết .. một số yếu tố số một số yếu tố kết hợp,

call_user_func_array($function, $args); 

chuyển đổi mảng tới một cái gì đó như thế này:

$args = array(
    4, 
    'hello', 
    'hi' 
); 

Có cách nào khác ngoài việc vượt qua một mảng như thế này không:

$args = array(
    4, 
    array('test' => 'hello'), 
    'hi' 
); 

Cảm ơn! Matt

+0

Bạn có thể hiển thị những gì đang được thực hiện với '$ args' trong' $ function' không? –

+0

$ chức năng chỉ là một chuỗi như 'to_lowercase' hoặc một cái gì đó .. – Matt

Trả lời

15

Có nơi nào cho các phím mảng để đi vì:

call_user_func_array($function, $args); 

tương đương với điều này:

$function(4, 'hello', 'hi'); 

Bạn có thể sử dụng call_user_func() thay vì:

call_user_func($function, $args); 

sau đó đưa một hàm với một đối số, bạn có thể nhận mảng kết hợp:

function func($args) { 
// $args is complete associative array 
} 

Lưu ý rằng call_user_func() cũng có thể thực hiện nhiều đối số - mỗi đối số sẽ được chuyển đến hàm được gọi làm đối số.

+1

không có gì thêm để thêm. xóa của tôi, upvoting của bạn – Gordon

+0

Oh thực sự? Tôi cảm thấy ngớ ngẩn- Tôi biết tôi đã thử call_user_func() trước khi quyết định call_user_func_array(), tôi đoán yêu cầu của tôi phải thay đổi. Nếu tôi làm func_get_args ($ args) nó sẽ trả về một mảng của mảng kết hợp? – Matt

+0

vâng, func_get_args() == mảng ($ arg) trong ví dụ trên –

Các vấn đề liên quan