字符串
$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);
因此,如果我尝试在现有元素集的最后一个元素之后添加新元素,则会因远程服务器错误而关闭该连接。它出什么问题了?
这应该有效:
function create_array(&$arr,$string,$data){
$a=explode('.',$string);
$last=count($a)-1;
$p=&$arr;
foreach($a as $k=>$key){
if ($k==$last) {
$p[$key]=$data;
} else if (is_array($p)){
$p[$key]=array();
}
$p=&$p[$key];
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)