我有一組格式爲「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