我有一组格式为“A.B.C”的字符串,并且可以具有不同的“深度”。 I.E.一个可能只是“A”或可能是“A.B.C.D”。将字符串分解为关联数组键
我想能够将其转换为关联数组的键。因此, “A” 将转化为
$var["A"] = $val;
和 “A·B” 将转化为
$var["A"]["B"] = $val;
我有一组格式为“A.B.C”的字符串,并且可以具有不同的“深度”。 I.E.一个可能只是“A”或可能是“A.B.C.D”。将字符串分解为关联数组键
我想能够将其转换为关联数组的键。因此, “A” 将转化为
$var["A"] = $val;
和 “A·B” 将转化为
$var["A"]["B"] = $val;
使用递归函数和路过&reference
$str = "A.B.C" ;
$letters = explode(".", $str);
$result = array() ;
function goDeep(&$array, $letters, $level){
if ($level >= count($letters)){
$array = "Your value here" ;
return ;
}
$array[$letters[$level]] = array() ;
goDeep($array[$letters[$level]], $letters, ++$level);
}
goDeep($result, $letters, 0);
var_dump($result); //3 - level deep array is ready.
我不得不删除“$ array [$ letters [$ level]] = array();”与多个通行证一起工作,但是谢谢。 – mjr
解决方案可以eval()
。
<?php
$a = "A.B.C";
$temp = explode('.',$a);
$keys = "";
foreach ($temp as $value) {
$keys .= "['$value']";
}
$val = "XXX";
$var = array();
eval('$var'.$keys.' = $val;');
print_r($var);
?>
结果一样:
Array ([A] => Array ([B] => Array ([C] => XXX)))
'$ var'是一个空数组。 Indeces'A','B'将是未定义的。 – vikingmaster
你运行了吗? 我跑了,得到了这个结果Array([A] => Array([B] => Array([C] => XXX)))。所以,在运行eval代码后,Indeces A,B不能被定义。 –
我有点不知道为什么它的工作原理:D – vikingmaster
酷的故事兄弟。你尝试了什么? – Neal
我见过几个人用固定深度键使用爆炸做类似的事情(http://stackoverflow.com/questions/6406462/php-creating-arrays-by-exploded-strings)。然而,我并不知道阵列的深度。 – mjr
[通过带分隔符的字符串访问多维数组]的可能重复(http://stackoverflow.com/questions/7520048/access-multidimensional-array-by-string-with-delimiter) - 这只是众多重复项中的一个。请稍微创造一些如何搜索:) – hakre