2013-11-21 82 views
1

我在PHP選擇從多維數組元素,使用字符串(PHP)

一個多維陣列
$somearray = array(
    'item1' => array(
     'subitem1' => 'Some value', 
     'subitem2' => 'Some other value', 
     'subitem3' => array(
      'subsubitem' => 'A sub value' 
     ) 
    ), 
    'item2' => 'a different value' 
); 

我然後有一個字符串地圖表示我要選擇哪個值:

"item1/subitem3/subsubitem" 

如何從這個字符串數組的地圖轉換成:

$wanted_value = $somearray['item1']['subitem3']['subsubitem']; 

但請記住該陣列可以是任何深度級別。

+3

'explode'你的路徑,然後遍歷用遞歸函數的數組。 – mario

+0

我不認爲它應該是遞歸的 – tobspr

+1

只是爲了好玩:'eval('$ wanted_value = $ somearray [''。str_replace(「/」,'「] [」',$ map)。'「];' );'完成!但嚴重的是,使用@ TobSpr的方法。 =) – jszobody

回答

1

另一種方式(也應該檢查,以確保鍵存在):

$path = explode("/", "item1/subitem3/subsubitem"); 
$result = $somearray; 

foreach($path as $k) { 
    $result = $result[$k]; 
} 
echo $result; 
+0

我實際上在@TobSpr上使用了這個,因爲我發現在該過程中使用'if(isset($ result [$ k]))'添加一些基本的理智檢查更容易,但兩種解決方案都很完美。謝謝你們。 –

3

這應該工作:

$parts = explode("/", $map); 

$currentData = $somearray; 
for ($i = 0; $i < count($parts); $i++) { 
    $currentData = $currentData[$parts[$i]]; 
} 

$result = $currentData;