发现这篇帮助我的帖子:Split a string to form multidimensional array keys?
无论如何,当涉及字符串值时,它就像魅力一样,但如果数组键包含整数,那么它就会错过这些。
以下是演示:
我有一套钥匙:
Array
(
[0] => variable_data
[1] => 0
[2] => var_type
)
创建e嵌套数组的方法
function constructArray( &$array_ptr, $keys, $value )
{
// extract the last key
$last_key = array_pop ( $keys );
// walk/build the array to the specified key
while ( $arr_key = strval( array_shift ( $keys ) ) )
{
if ( !array_key_exists ( strval($arr_key), $array_ptr ) )
{
$array_ptr[ strval($arr_key) ] = array ( );
}
$array_ptr = &$array_ptr[ strval($arr_key) ];
}
// set the final key
$array_ptr[ $last_key ] = '$value';
}
我以这种方式使用它:
$keys = array(
'variable_data',
'0',
'var_type'
);
$clean_arr = array();
constructArray($clean_arr, $keys, 'asd');
但输出如下:
Array
(
[variable_data] => Array
(
[var_desc] => $value
)
)
如您所见,variable_data索引不包含0索引。我已经测试了我可能知道的所有工作,但它没有。谁有更好的线索?
答案 0 :(得分:0)
这是魔术的功能:
function constructArray( &$array_ptr, $keys, $value )
{
// extract the last key
$last_key = array_pop ( $keys );
foreach ( $keys as $arr_key )
{
unset($keys[$arr_key]);
if ( !array_key_exists ( strval($arr_key), $array_ptr ) )
{
$array_ptr[ strval($arr_key) ] = array ( );
}
$array_ptr = &$array_ptr[ strval($arr_key) ];
}
// set the final key
$array_ptr[ $last_key ] = $value;
}
用法:
$keys = array('variable_data', '0', 'var_desc');
$clean_arr = array();
constructArray($clean_arr, $keys, 'asd');
// Output
Array
(
[variable_data] => Array
(
[0] => Array
(
[var_desc] => asd
)
)
)