Обновление: Моим первоначальным намерением по этому вопросу было определить, действительно ли PHP имеет эту функцию. Это было потеряно в ответах на скалярную проблему. вместо этого задайте вопрос: «Есть ли в PHP автовивификация?» Этот вопрос оставлен здесь для справки.
Согласно Википедии , в PHP нет автовивификации, но этот код работает:
$test['a']['b'] = 1;
$test['a']['c'] = 1;
$test['b']['b'] = 1;
$test['b']['c'] = 1;
var_dump($test);
Вывод :
array
'a' =>
array
'b' => int 1
'c' => int 1
'b' =>
array
'b' => int 1
'c' => int 1
Я обнаружил, что этот код тоже работает:
$test['a'][4] = 1;
$test['b'][4]['f'] = 3;
Но добавление этой строки вызывает предупреждение («Предупреждение: нельзя использовать скалярное значение как массив»)
$test['a'][4]['f'] = 3;
What ' здесь происходит? Почему не удается добавить ассоциативный элемент после индекса? Является ли это «истинным» автовивификацией Perl или его разновидностями, или чем-то еще?
Edit: о, теперь я вижу ошибку со скаляром, упс! Они работают, как ожидалось:
$test['a'][4]['a'] = 1;
$test['a'][4]['b'] = 2;
$test['a'][5]['c'] = 3;
$test['a'][8]['d'] = 4;
Итак, у php есть автовивификация? Поиск в Google по запросу "автовивификация php" не дает канонического ответа или его примера.