2011-09-05 98 views
1

我需要一點幫助。我對算法的知識很薄弱。我不能在PHP中編寫一個返回所有最新孩子的遞歸函數。獲取所有最新的兒童

假設我們的數組是這樣的:

Array 
(
[0] => Array 
    (
     [id_category] => 1 
     [name] => Accueil 
     [id_parent] => 0 
    ) 

[1] => Array 
    (
     [id_category] => 2 
     [name] => Accessoires 
     [id_parent] => 1 
    ) 

[2] => Array 
    (
     [id_category] => 3 
     [name] => Merchandising 
     [id_parent] => 1 
    ) 

[3] => Array 
    (
     [id_category] => 4 
     [name] => Pièces détachées 
     [id_parent] => 1 
    ) 

[4] => Array 
    (
     [id_category] => 5 
     [name] => Excavateur 
     [id_parent] => 4 
    ) 

[5] => Array 
    (
     [id_category] => 6 
     [name] => série 100 
     [id_parent] => 5 
    ) 

[6] => Array 
    (
     [id_category] => 7 
     [name] => above 
     [id_parent] => 6 
    ) 

[7] => Array 
    (
     [id_category] => 8 
     [name] => système hydraulique 
     [id_parent] => 7 
    ) 

[8] => Array 
    (
     [id_category] => 9 
     [name] => série 200 
     [id_parent] => 5 
    ) 

[9] => Array 
    (
     [id_category] => 10 
     [name] => thru 
     [id_parent] => 6 
    ) 

[10] => Array 
    (
     [id_category] => 11 
     [name] => Compaction 
     [id_parent] => 4 
    ) 

[11] => Array 
    (
     [id_category] => 12 
     [name] => système électrique 
     [id_parent] => 7 
    ) 

) 

我想getLastChildren(5)或getLastChildren(6)或getLastChildren(7),該函數返回我一個答案陣列( 「8」,「12 「)

我會試着舉個例子。

如果我拿5類:= 6和9是孩子。

我看透了孩子。孩子6有兩個孩子,7和10,孩子9:沒有孩子。

我把9放在孩子的名單上。

孩子7有兩個孩子,8歲和12歲。8沒有孩子。 12沒有孩子。我加8和12.

所以我們返回(9,8,12)10沒有孩子。我還補充說。

我到底(9,8,12,10)

所以我會做什麼,如果我「第7類所有的孩子們最後的」搜索=> 8,和12。我希望我的解釋是「更清楚一點」。

+0

是如何「最新兒童「的定義? –

+0

它看起來像一個類別可以有多個孩子。在這種情況下,哪一個是最後一個? – arnaud576875

+1

一個例子會很棒。 – Ivan

回答

2

我會做這樣的事情:

$array = array(
    array (
     'id_category' => 1, 
     'name' => 'Accueil', 
     'id_parent' => 0, 
    ), 
    array (
     'id_category' => 2, 
     'name' => 'Accessoires', 
     'id_parent' => 1, 
    ), 
    array (
     'id_category' => 3, 
     'name' => 'Merchandising', 
     'id_parent' => 1, 
    ), 
    array (
     'id_category' => 4, 
     'name' => 'Pièces détachées', 
     'id_parent' => 1, 
    ), 
    array (
     'id_category' => 5, 
     'name' => 'Excavateur', 
     'id_parent' => 4, 
    ), 
    array (
     'id_category' => 6, 
     'name' => 'série 100', 
     'id_parent' => 5, 
    ), 
    array (
     'id_category' => 7, 
     'name' => 'above', 
     'id_parent' => 6, 
    ), 
    array (
     'id_category' => 8, 
     'name' => 'système hydraulique', 
     'id_parent' => 7, 
    ), 
    array (
     'id_category' => 9, 
     'name' => 'série 200', 
     'id_parent' => 5, 
    ), 
    array (
     'id_category' => 10, 
     'name' => 'thru', 
     'id_parent' => 6, 
    ), 
    array (
     'id_category' => 11, 
     'name' => 'Compaction', 
     'id_parent' => 4, 
    ), 
    array (
     'id_category' => 12, 
     'name' => 'système électrique', 
     'id_parent' => 7, 
    ), 
); 

我拆分數據和代碼,這裏是代碼:

$children = array(); 
function getLastChildren($array, $parent) { 
global $children; 
    foreach ($array as $key => $value) { 
     if ($value['id_parent'] == $parent) { 
      if (hasChild($array, $value['id_category'])) { 
       getLastChildren($array, $value['id_category']); 
      } else { 
       $children[] = $value['id_category']; 
      } 
     } 
    } 
} 

function hasChild($array, $parent) { 
    foreach ($array as $key => $value) { 
     if ($value['id_parent'] == $parent) { 
      return true; 
     } 
    } 
    return false; 
} 

getLastChildren($array, 5); 
print_r($children); 

輸出:

Array 
(
    [0] => 8 
    [1] => 12 
    [2] => 10 
    [3] => 9 
) 
+0

太好了!非常感謝,它有效=) –

+0

@Raphaël:不客氣。 – Toto