Обновление. Первоначально я хотел выяснить, есть ли в 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;
Что здесь происходит? Почему происходит сбой при добавлении ассоциативного элемента после индекса? Это «настоящая» Perl-подобная автовивификация или какая-то ее разновидность или что-то еще?
Редактировать: о, теперь я вижу ошибку со скаляром, упс! Эти работы, как и ожидалось:
$test['a'][4]['a'] = 1;
$test['a'][4]['b'] = 2;
$test['a'][5]['c'] = 3;
$test['a'][8]['d'] = 4;
Итак, у php есть автовификация? Поиск в Google по запросу "php autovivification" не приводит к каноническому ответу или его примеру.