Создание рекурсивной функции в php для реструктуризации набора записей?

0

Я надеялся, что кто-то сможет посоветовать, как лучше всего это сделать.

У меня есть набор результатов для базы данных, который выглядит примерно так:

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).

  • 0
    Если вы используете MySQL для получения данных, то есть ли причина, по которой вы не можете просто изменить запрос, чтобы сделать то, что вы делаете? Какова структура таблицы?
Теги:

1 ответ

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

Или почему они должны быть исключены?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню