Функция PHP Аргумент к массиву - PullRequest
0 голосов
/ 30 сентября 2011

Можете ли вы сделать что-то сумасшедшее, как это

function cool_function($pizza, $ice_cream) { 

   make the arguments in the array into an array 
   return $array_of_paramaters // my new array 

} // end function 

print_r(cool_function); // outputs array(0 => pizza, 1=> ice cream)

Ответы [ 4 ]

4 голосов
/ 30 сентября 2011

На самом деле, это довольно просто (и прочитайте руководство: func_get_args - возвращает массив, содержащий список аргументов функции, см. Также: Списки аргументов переменной длины ):

function cool_function($pizza, $ice_cream) { 
   return func_get_args();
}

но, как спросили в комментариях, зачем вам это нужно?

Или вам нужны имена переменных? Отражение Документы Ваш друг:

function cool_named($neutron, $electron)
{
    $f = new ReflectionFunction(__FUNCTION__);
    $p = array();    
    foreach($f->getParameters() as $p1)
        $p[] = '$'.$p1->name;

    return $p;
}

var_dump(cool_named());

Или только оба?( Редактировать: с учетом параметров недостаточной длины, необязательных и избыточной длины):

function overall($neutron, $electron, $quark = 'xiaro')
{
    $f = new ReflectionFunction(__FUNCTION__);
    $defined = $f->getParameters();
    $passed = func_get_args() + array_fill(0, count($defined), NULL);

    foreach($defined as &$param)
        $param = '$'.$param->name;

    return array_combine($defined + array_keys($passed), $passed);
}

var_dump(overall('clara', 'peter', 'moon', 'jupiter'));
3 голосов
/ 30 сентября 2011

Я не уверен, что вы ищете func_get_args, который возвращает все аргументы, переданные функции, или класс ReflectionFunction.

Базовый пример func_get_args:

function cool_function($pizza, $ice_cream) { 
   return func_get_args();
}

Но вам не нужны аргументы для этой работы:

function cool_function() { 
   return func_get_args();
}
// cool_function(1,2,3) will return array(1,2,3)

Опция отражения:

/**
 * Returns an array of the names of this function
 */
function getMyArgNames($a,$b,$c)
{
    $args = array();
    $refFunc = new ReflectionFunction(__FUNCTION__);
    foreach( $refFunc->getParameters() as $param ){
         $args[] = $param->name;
    }
    return $args;
}

Или, для действительно сумасшедших:

/**
 * Returns an associative array of the names of this function mapped 
 * to their values
 */
function getMyArgNames($a,$b,$c)
{
    $received = func_get_args();
    $i = 0;
    $args = array();
    $refFunc = new ReflectionFunction(__FUNCTION__);
    foreach( $refFunc->getParameters() as $param ){
         $args[$param->name] = $received[$i++];
    }
    // include all of those random, optional arguments.
    while($i < count($received)) $args[] = $received[$i++];
    return $args;
}
0 голосов
/ 30 сентября 2011

Если я вас правильно понял, вам так это нравится:

function cool_function($pizza, $ice_cream) {
   return array($pizza, $ice_cream);
}

но вы можете просто сделать это:

$new_var = array($pizza, $ice_cream);
0 голосов
/ 30 сентября 2011

ты имеешь в виду

function valuesToArray($value1,$value2){return array($value1,$value2);}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...