2014-11-02 35 views
2

比方說,我有以下PHP多維數組,其目的是要通過遞歸:如何遞歸獲取多維數組中所有父元素的ID?

$arr = array(
    array(
    'id' => 1, 
    'kids' => array(
     array(
     'id' => 11, 
     'kids' => array(
      array(
      'id' => 101, 
      'kids' => array(), 
     ), 
     ), 
    ), // please note this is a sample 
    ), // it could have any number of levels 
), 
); 

如何,給出了101的ID值,我能弄清楚,ID號爲1和11是元素的父母在多維數組中?

+1

任何樹搜索算法應該工作。對於PHP實現,請查看http://www.stoimen.com/blog/2012/09/17/computer-algorithms-graph-depth-first-search/ – 2014-11-02 22:00:53

+1

Per @ M.Page評論。這裏有一些關於這個想法的閱讀。 http://en.wikipedia.org/wiki/Tree_traversal例如,您可以使用您要查找的ID的基本案例進行深度優先搜索。然後,您可以在返回時傳遞父ID。 – jmbertucci 2014-11-02 22:02:00

+1

我還建議在數組設置中進行修改:將鍵設爲id值,然後使用它們橫切。讓我看看我能否快速做出例子。 – Jhecht 2014-11-02 23:16:23

回答

2

我寫了一個可能對您有幫助的功能。

function get_parents($target, $array) 
{ 
    $parents_id = false; 
    foreach ($array as $item) { 
     if (empty($array)) 
      return; 
     if ($item['id'] == $target) 
      return array(); 
     else 
      $parents_id = get_parents($target, $item['kids']); 
     if (is_array($parents_id)) 
      array_unshift($parents_id, $item['id']); 

    } 
    return $parents_id; 
} 

對於數組中的每個項目,如果它是空的,則不返回任何內容。如果它是您正在查找的項目,請返回一個空數組,我們將在其中添加父級的ID,否則繼續往下看。在這一點上,如果$ parents_id是一個數組,是因爲你已經找到你的目標的關鍵,所以加父母IDS您數組的開頭

調用此函數是這樣的:get_parents('101', $arr);

在您的例子中,結果將是:

Array 
(
    [0] => 1 
    [1] => 11 
) 

如果未找到目標鍵,函數返回false

0

只是在第一陣列深 ,而不是由本

$ ARR工作=陣列( 陣列( 'ID'=> 1本工作方案,//啓動根 '父'=>數組( 陣列( 'ID'=> 2, '父'=>數組( 陣列( 'ID'=> 3, '父'=>數組(陣列( 'ID'=> 4, '父' => array()),array('id'=> 5,'parent'=> array())), ),

 array(
     'id' => 6, 
     'parent' => array(array('id' => 7,'parent' => array()),array('id' => 8,'parent' => array())), 
    ), 

    ), 
), 
     array(
    'id' => 9, 
    'parent' => array(
     array(
     'id' => 10, 
     'parent' => array(array('id' => 11,'parent' => array()),array('id' => 12,'parent' => array())), 
    ), 

     array(
     'id' => 13, 
     'parent' => array(array('id' => 14,'parent' => array()),array('id' => 15,'parent' => array())), 
    ), 

    ), 
), 

), //end root 

),

);

相關問題