Вы должны проверить массив до, но не включая уровень, который вы собираетесь установить.
Если вы собираетесь установить
$anArray[ 'level1' ][ 'level2' ][ 'level3' ] = ...
Вы должны убедиться, что путь до уровня 2 действительно существует до установки уровня 3.
$anArray[ 'level1' ][ 'level2' ]
Никакие щенки на самом деле не будут убиты, если вы этого не сделаете, но они могут быть раздражены в зависимости от вашей конкретной среды.
Вам не нужно проверять индекс, который вы фактически устанавливаете, потому что его установка автоматически означает, что он объявлен, но в интересах хорошей практики вы должны убедиться, что ничего не создано магическим образом.
Существует простой способ сделать это:
<?php
function create_array_path( $path, & $inArray )
{
if ( ! is_array( $inArray ) )
{
throw new Exception( 'The second argument is not an array!' );
}
$traversed = array();
$current = &$inArray;
foreach( $path as $subpath )
{
$traversed[] = $subpath;
if ( ! is_array( $current ) )
{
$current = array();
}
if ( ! array_key_exists( $subpath, $current ) )
{
$current[ $subpath ] = '';
}
$current = &$current[ $subpath ];
}
}
$myArray = array();
create_array_path( array( 'level1', 'level2', 'level3' ), $myArray );
print_r( $myArray );
?>
Будет выведено:
Array
(
[level1] => Array
(
[level2] => Array
(
[level3] =>
)
)
)