2013-09-30 77 views
0

我有一組格式爲「A.B.C」的字符串,並且可以具有不同的「深度」。 I.E.一個可能只是「A」或可能是「A.B.C.D」。將字符串分解爲關聯數組鍵

我想能夠將其轉換爲關聯數組的鍵。因此, 「A」 將轉化爲

$var["A"] = $val; 

和 「A·B」 將轉化爲

$var["A"]["B"] = $val; 
+5

酷的故事兄弟。你嘗試了什麼? – Neal

+0

我見過幾個人用固定深度鍵使用爆炸做類似的事情(http://stackoverflow.com/questions/6406462/php-creating-arrays-by-exploded-strings)。然而,我並不知道陣列的深度。 – mjr

+0

[通過帶分隔符的字符串訪問多維數組]的可能重複(http://stackoverflow.com/questions/7520048/access-multidimensional-array-by-string-with-delimiter) - 這只是衆多重複項中的一個。請稍微創造一些如何搜索:) – hakre

回答

1

使用遞歸函數和路過&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. 
+0

我不得不刪除「$ array [$ letters [$ level]] = array();」與多個通行證一起工作,但是謝謝。 – mjr

0

解決方案可以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))) 
+0

'$ var'是一個空數組。 Indeces'A','B'將是未定義的。 – vikingmaster

+0

你運行了嗎? 我跑了,得到了這個結果Array([A] => Array([B] => Array([C] => XXX)))。所以,在運行eval代碼後,Indeces A,B不能被定義。 –

+0

我有點不知道爲什麼它的工作原理:D – vikingmaster