Как я могу передать переменное количество аргументов (и ключ и значения) в PHP
<?php
function tryfun() {
echo "inside try()";
$args = func_get_args();
print_r($args);
}
tryfun(1,2);
tryfun(array("key"=>"value"));
?>
вывод это получить
root@ip-:~# php trycmd.php
inside try()Array
(
[0] => 1
[1] => 2
)
inside try()Array
(
[0] => Array
(
[key] => value
)
)
что я хочу, чтобы это было
root@ip:~# php trycmd.php
inside try()Array
(
[0] => 1
[1] => 2
)
inside try()Array
(
[key] => value
)
как я могу добиться этого в php
я использую Debian 7 wheezy
PHP 5.4
Вы не можете диктовать «имена» аргументов извне функции.
function ($foo, $bar) ...
Здесь первый позиционный аргумент будет назначен переменной $foo
второй $bar
,
function () {
$args = func_get_args();
...
}
Здесь все позиционно переданные аргументы будут назначены массиву $args
, Сами значения не имеют «имени», потому что «имена» не передаются.
Если вы передаете массив с парами ключ-значение, как вы это делаете, то ваш аргумент является массивом, который содержит пары ключ-значение. Сам массив по-прежнему воспроизводится в соответствии с вышеуказанными правилами.
Может быть, вы ищете extract()
, или, может быть, то, что вы хотите, просто не так, как это работает.
Это может помочь вам: call_user_func_array
Создайте массив, в котором вы храните все параметры, и передайте этот массив в call_user_func_array. Должно работать нормально;)
Вы должны проверить, является ли ваш ввод массивом:
$args = func_get_args();
if(is_array($args) && count($args) == 1 && is_array($args[0]))
{
$args = $args[0];
}
print_r($args);
если вы хотите, вы можете проверить по другим шаблонам.
Вы можете сделать это:
function tryfun(){
$args = array();
$_args = func_get_args();
foreach( $_args as $a ){
if( is_array($a) ){
$args = array_merge( $args, $a );
}else{
$args[] = $a;
}
}
print_r($args);
}
tryfun(1,2);
Array
(
[0] => 1
[1] => 2
)
tryfun(array("key"=>"value"));
Array
(
[key] => value
)
tryfun(1,2,array("key"=>"value"));
Array
(
[0] => 1
[1] => 2
[key] => value
)