2011-09-05 73 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