2012-01-28 34 views
12

Tôi có vấn đề thực sự đơn giản trong tập lệnh PHP của mình. Có một chức năng được xác định trong đó có biến chiều dài danh sách đối số:PHP - Vượt qua mảng dưới dạng danh sách đối số có độ dài thay đổi

function foo() { 
    // func_get_args() and similar stuff here 
} 

Khi tôi gọi nó là như thế này, nó hoạt động tốt:

foo("hello", "world"); 

Tuy nhiên, tôi có các biến của tôi trong mảng và Tôi cần phải chuyển chúng một cách riêng biệt thành các đối số duy nhất cho hàm. Ví dụ:

$my_args = array("hello", "world"); 
foo(do_some_stuff($my_args)); 

do_some_stuff chức năng mà chia tách các đối số cho tôi để tôi có thể vượt qua chúng với chức năng?

+0

có thể trùng lặp của [Truyền một mảng làm đối số, không phải là mảng, trong PHP] (http://stackoverflow.com/questions/744145/passing-an-array-as-arguments-not-an-array-in -p) – DanMan

Trả lời

0

http://www.php.net/manual/en/functions.arguments.php#functions.variable-arg-list

Đây không phải là những gì bạn muốn?

chỉnh sửa ah ... ok ... làm thế nào về điều này: Passing an Array as Arguments, not an Array, in PHP

+0

Không.Tôi đã đọc cái này rồi. Tất cả các hàm được cho là hoạt động _inside_ hàm "foo" của tôi. Tôi cần phải phân tách các đối số trước khi chúng được truyền cho hàm. –

2

Âm thanh với tôi như bạn đang tìm kiếm call_user_func_array.

+0

Cảm ơn câu trả lời, đó chính xác là những gì tôi cần. Tuy nhiên, tôi chỉ có thể chấp nhận một câu trả lời. –

+0

Chỉ cần chấp nhận một trong đó cung cấp cho các chi tiết cần thiết nhất, hoặc một trong những sớm nhất :) –

0

Nếu bạn có thể thay đổi mã của foo() nó phải được dễ dàng để giải quyết này chỉ trong một nơi.

function foo() 
{ 
    $args = func_get_args(); 
    if(count($args) == 1 && is_array($args[0])) 
    { 
     $args = $args[0] 
    } 
    // use $args as normal 
} 
+0

Điều này không có tác dụng nếu anh ta muốn chuyển một mảng (thực) làm đối số đầu tiên. –

+0

Không, nó không hoạt động nếu chỉ có một đối số và đối số đó được cho là một mảng. Nếu có nhiều hơn một đối số thì tất cả chúng đều bị bỏ lại một mình. – Arjan

+0

Yup, tôi đã thấy, tôi đã thấy ... –

3

Bạn đang tìm kiếm call_user_func_array().

http://it2.php.net/manual/en/function.call-user-func-array.php

Cách sử dụng:

$my_args = array("hello", "world"); 
call_user_func_array('foo', $my_args); 

// Equivalent to: 
foo("hello", "world"); 
+0

Cảm ơn bạn đã so sánh – jocken

+1

Điều này là tốt hơn nhiều so với sử dụng Phản ánh trong quan điểm của tôi – StormByte

0

Giải pháp này không được khuyến khích ở tất cả, nhưng chỉ hiển thị một khả năng:

Sử dụng eval

eval ("foo('" . implode("', '", $args_array) . "')");

+1

Tôi biết nó chỉ "hiển thị một khả năng", nhưng vẫn ... nó là eval. ;) – Crozin

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