Подтвердить что ты не робот

Распаковка массива аргументов в php

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

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

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

range(3, 6)

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

4b9b3361

Ответ 1

Вы можете использовать call_user_func_array(), чтобы достичь этого:

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

Ответ 2

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

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

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

echo add(...$list);

Ответ 3

В некоторых сценариях вы можете рассмотреть возможность использования unpacking, что возможно в php, аналогично python:

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

Вот как я, по крайней мере, пришел к этому ответу. Поиск в Google: PHP argument unpacking

Ответ 5

<?php

function add(int ...$arr) {           // typehint ready
    return array_sum($arr);
}

var_dump(add(1, 2, 3, ...[1, 2, 3])); // int(12)

Еще один пример с... - оператором.
RFC: https://wiki.php.net/rfc/variadics