在php中创建一个递归函数来重构记录集?

时间:2010-10-09 17:30:05

标签: php mysql

我希望有人可以就如何做到这一点提出建议。

我有一个类似于这样的数据库结果集:

PARENT       CHILD
Cat          Tiger
Cat          Lion
Cat          Panther
Mammal       Cat
Mammal       Dog
Creature     Mammal

我需要的是一个函数,当传递此结果集时,将返回如下所示的内容:

PARENT       CHILD
Cat          Tiger
Cat          Lion
Cat          Panther
Mammal       Tiger
Mammal       Lion
Mammal       Panther
Creature     Tiger
Creature     Lion
Creature     Panther

描述这种功能的过程:

  • 如果PARENT字段中不存在CHILD字段中的值,我们只需将该行添加到$ newArray。

  • 如果CHILD字段中的值存在于PARENT字段中,我们要检查PARENT字段中出现此值的任何实例并应用相同的考虑因素,仅添加到$ newArray在PARENT字段中没有出现CHILD,并将最终的CHILD与原始 PARENT相关联。

我认识到这涉及在父字段上迭代时的递归。我试过这个但最终被卡住了......

感谢您的帮助!

(请注意,如果使用SQL存储过程更好地服务于此,我愿意接受建议。我正在使用mySQL,并且理解不支持递归,因此我在php中尝试了这一点。)

1 个答案:

答案 0 :(得分:1)

尝试将伪代码转换为php:

$map = array( "Cat" => array("Tiger","Lion",....

getChildren($map,'Mammal') ===> (Tiger,Lion,Panther,Dog)

function getChildren($map,$parent)
{
  if (!isset($map[$parent]))//if a value in the CHILD field does not exist in the PARENT field
    return array($parent); 
  $return = array();      
  $children=$map[$parent];

  foreach($children as $child)//we want to examine any instances where this value occurs in the PARENT field 
  {
    $return = merge($return, getChildren($child));//and apply the same consideration
  }
  return $return;
}

不确定我没有犯任何错误。但是这也会给出:

Creature  Dog
Mammal    Dog

或者为什么要排除这些?