2008-11-16 3 views
23

Python обеспечивает «*» оператор для распаковки списка кортежей и давая им функцию в качестве аргументов, например, так:распаковка массива аргументов в PHP

args = [3, 6] 
range(*args)   # call with arguments unpacked from a list 

Это эквивалентно:

range(3, 6) 

Кто-нибудь знает, есть ли способ достичь этого в PHP? Некоторые поисковые запросы по вариантам «PHP Unpack» не сразу принесли что-либо ... возможно, это называется чем-то другим в PHP?

ответ

22

Вы можете использовать call_user_func_array() для достижения этой цели:

call_user_func_array("range", $args); использовать свой пример.

13

В php5.6... operator был добавлен. Используя это, вы можете избавиться от call_user_func_array() для этой простой альтернативы. Например, имеющей функцию

function add($a, $b){ 
    return $a + $b; 
} 

и ваш массив $list = [4, 6]; (после php5.5 вы можете объявлять массивы в этом смысле). Вы можете вызвать вашу функцию с ...:

echo add(...$list);

+0

Не работает, если в вашем массиве есть клавиши String;) – BusyAnt 2017-12-04 13:04:13

0

В некоторых случаях, вы можете рассмотреть возможность использования unpacking, что возможно в PHP, является таким же способом питона:

list($min, $max) = [3, 6]; 
range($min, $max); 

Это как я пришел к этому ответу хотя бы. Поиск в Google: PHP argument unpacking

Смежные вопросы