2015-02-10 4 views
0

мне нужна функция, как этот:PHP - Создание многомерного массива с использованием динамических функций аргументов

function multi(){ 
    $args = get_func_args(); 
    $array = ???? 
    return $array; 
} 
print_r(multi('foo','bar','baz',123)); 
// expected result: array([foo] => array([bar] => array([baz] => 123))) 
+0

Должен ли быть список аргументов, переданных или передаваемых в массив? 'print_r (multi (array ('foo', 'bar', 'baz', 123)));' – AbraCadaver

+0

все, что я думаю .. '$ args' в функции имеет args как массив. –

ответ

1

Я ответил несколько вариаций этого, используя ссылку для наращивания массива:

function multi() { 
    $path = func_get_args();  //get args 
    $value = array_pop($path); //get last arg for value 

    $result = array();   //define our result 
    $temp = &$result;    //reference our result 

    //loop through args to create key 
    foreach($path as $key) { 
     //assign array as reference to and create new inner array 
     $temp =& $temp[$key]; 
    } 
    $temp = $value;    //set the value 

    return $result; 
} 

print_r(multi('foo','bar','baz',123)); 
+0

hmmm ссылки .. здесь отправляем! спасибо!! –

+0

Да, также см. Здесь, возможно, лучший способ, хотя «func_get_args» также классный: http://stackoverflow.com/questions/27929875/use-a-string-of-values-or-an-array- to-navigate-a-array – AbraCadaver

+0

Теперь я получаю вашу ссылку. Отлично! –

0

Это также будет работать:

function multi(){ 
     $array = null; 
     $args = func_get_args(); 
     while(count($args)>0) { 
      $last = array_pop($args); 
      $array = $array ? array($last=>$array) : $last; 
     } 
     return $array; 
    } 
    $data = multi('foo','bar','baz',123); 

чтобы обновить существующее значение (не проверяет, если элементы действительно существует)

function set_multi($val, &$target){ 
     $args = array_slice(func_get_args(), 2); 
     while(count($args)>0) { 
      $first = array_shift($args); 
      $target = &$target[$first]; 
     } 
     $target = $val; 
    } 
    set_multi(456, $data, 'foo', 'bar', 'baz');  
+0

Хорошо! .. Как я могу обновить глобальный многоаспектный массив, например '$ array ['foo'] ['jojo'] ['test'] = 345'? –

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