2012-11-20 198 views
2

我需要一些邏輯來解決以下問題,但是我無法理解它。基本上我有如下所示陣列的一些數據分層數據到數組

array(
    array('name' => 'Test1', 
      'hierarchy'=> '1'), 
    array('name' => 'Test2', 
      'hierarchy'=> '1.1'), 
    array('name' => 'Test3', 
      'hierarchy'=> '1.2'), 
    array('name' => 'Test4', 
      'hierarchy'=> '1.2.1') 
) 

現在我想在這樣一種方式,

$array[1] = 'Test1'; 
$array[1][2][1] = 'Test4'; 

試圖動態變量命名和動態創建多維數組輸出的陣列,但兩者不似乎上班。

+2

你說過,「試過動態變量命名和動態創建多維數組,但兩者都不起作用。」 - 告訴我們你的代碼... – Aerik

回答

4

這是不可能的。

對於$array[1] = 'Test1';$array[1]需要是一個字符串,但對於$array[1][2][1] = 'Test4';它需要是一個數組。

你可以做這樣的事情:

$array[1]['text'] = 'Test1'; 
$array[1][2][1]['text'] = 'Test4'; 

這裏的代碼爲:

$result = array(); 

foreach ($input as $entry) 
{ 
    $path_components = explode('.', $entry['hierarchy']); 

    $pointer =& $result; 
    foreach ($path_components as $path_component) 
     $pointer =& $pointer[$path_component]; 

    $pointer['text'] = $entry['name']; 

    unset($pointer); 
} 
+0

非常感謝你,解決了這個問題! –

0

如果沒有絕對需要一個數組,你可以創建一個類,擴展ArrayClass或者你只需要訪問數組,你也可以實現ArrayAccess。 從那裏,你可以解析你的數據並返回你的應用程序所需的值。

+0

有效的想法,但它需要某種排序映射,所以我們不必每次都搜索適當的值。那麼,在PHP中的數組是一個排序哈希映射,所以這將是多餘的。 – cypher