字符串
$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);
因此,如果我尝试在现有元素集的最后一个元素之后添加一个新元素,则会因远程服务器错误而关闭该连接。怎么了?
答案 0 :(得分:1)
这应该有效:
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];
}
}
答案 1 :(得分:1)
目前还不太清楚,但如果你只想要你所要求的:
function convertToArray($string)
{
$pos = strpos($string, '.');
$key = substr($string, 0, $pos);
$result = array($key => array());
if ($pos === false) {
return array($string=>array());
} else {
$result[$key] = convertToArray(substr($string, ($pos+1)));
return $result;
}
}
var_dump(convertToArray('a.b.c.d'));
将输出:
array(1) {
["a"]=>
array(1) {
["b"]=>
array(1) {
["c"]=>
array(1) {
["d"]=>
array(0) {
}
}
}
}
}