2015-02-28 6 views
0

Вот пример PHP представление массиваМногоуровневой

array(
"test1" => array(
      "test1subtest1" => array(..) 
      ), 
"test2" => array(
      "test2subtest1" => array(..) 
      ) 
) 

Итак, вот вопрос: существует ли какой-либо инструмент в PHP, которые могут быть использованы для присвоения значений многомерного массива с случайной глубины и имена индексов? Это, предполагают, чтобы выглядеть следующим образом:

$valuetoassing = "TESTVALUE"; 
$testarray  = array(); 
array_assign_multidimensional($testarray, $valuetoassing, array("test1", "test1subtest1", "test1subtest1subtest1")); 

Проблема заключается в том, что я не знаю, что глубина массив будет иметь, так что я не могу его код. Имена индексов также генерируются во время выполнения.

EDIT: Я решил, что мой конкретный случай можно решить, используя какой-то связанный список (хранится как массив с элементами, которые содержат фактические данные и указатель на индекс следующего элемента), но я уверен, что я Я снова встречу эту проблему в будущем, поэтому я не буду закрывать вопрос прямо сейчас.

+0

Возможно, это помогает? http://php.net/manual/en/function.array-walk-recursive.php –

ответ

0

Это довольно легко сделать, используя references.

function array_assign_multidimensional(&$input_array, $value, $list){ 
     $assignee = &$input_array; 
     foreach($list as $key){ 
       $assignee = &$assignee[$key]; 
     } 
     $assignee = $value; 
} 


$input = array(
     'firstLayer' => array(
       'secondLayer' => array(
         'test' => 'old' 
       ) 
     ), 
     'randomOutlyingValue' => '' 
); 

array_assign_multidimensional($input, 'new', array('firstLayer', 'secondLayer', 'test')); 

var_dump($input); 

/* 
array(2) { 
    ["firstLayer"]=> 
    array(1) { 
    ["secondLayer"]=> 
    array(1) { 
     ["test"]=> 
     string(3) "new" 
    } 
    } 
    ["randomOutlyingValue"]=> 
    string(0) "" 
} 
*/ 
+0

Большое спасибо, это действительно помогло! –

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