【发布时间】:2012-02-05 00:31:12
【问题描述】:
字符串
$string = 'a.b.c.d';
应该创建一个类似的数组
array('a' => array('b' => array( ....
我想出了这个:
function create_array(&$arr, $string, $data){
$parts = explode('.', $string);
$key = array_shift($parts); // first key
$new_arr = array();
$have_empty_slot = false;
if(!isset($arr[$key])){
$arr[$key] = array();
$have_empty_slot = true;
}
$new_arr = &$arr[$key];
foreach($parts as $part){
if(!isset($new_arr[$part])){
$new_arr[$part] = array();
$have_empty_slot = true;
}
$new_arr = &$new_arr[$part];
}
// last one
if($have_empty_slot)
$new_arr = $data;
}
$arr = array('a' => array('aa' => array('aaa' => 555)), 'b' => 55);
create_array($arr, 'c.cc.dd', 4545); // <-- works
create_array($arr, 'a.aa.aa2', 33); // <-- works
create_array($arr, 'a.aa.aaa.aaaaaaa', 4545); // <-- connection closed by remote server lol
print_r($arr);
因此,如果我尝试在现有元素集的最后一个元素之后添加一个新元素,我会因为远程服务器错误而关闭该连接。它有什么问题?
【问题讨论】:
-
什么是
$arr,那个数字是多少(第三个参数)? -
第三个参数不重要,就是最后一个子元素的值