Я надеялся, что кто-то сможет посоветовать, как лучше всего это сделать.
У меня есть набор результатов для базы данных, который выглядит примерно так:
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
Описать процесс такой функции:
Если значение в поле CHILD не существует в поле PARENT, мы просто добавим строку в $newArray.
если значение в поле CHILD существует в поле PARENT, мы хотим проверить все случаи, когда это значение возникает в поле PARENT и применять одно и то же рассмотрение, только добавляя к $newArray, где CHILD не делает происходят в поле PARENT и связывают конечный РЕБЕНОК с исходным PARENT.
Я понимаю, что это включает рекурсию, итерацию над родительским полем. Я попытался это сделать, но в конечном итоге застрял...
Спасибо за любую помощь!
(Обратите внимание, что если лучше использовать это с помощью хранимой процедуры SQL, я открыт для предложений. Я использую mySQL и понимаю, что рекурсия не поддерживается, поэтому я пытаюсь это сделать в php).
Сделал снимок, пытаясь перевести ваш псевдокод на 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
Или почему они должны быть исключены?