seyfer
Новичок
Добрый день, форумчане. Помогите пожалуйста работать код с рекурсией так, как я хочу. Второй день ломаю голову.
Есть БД. В ней item имеет id и pid для древовидной структуры. Вот как раз и пытаюсь написать ф-ю такую, что бы база преображалась в вид:
И так далее. Т.е. элементы имеющие pid равный родительскому id вкладываются в него как массив в поле child. И так до бесконечности, пока есть child для родительского id.
Вот код. Вкладывается только 2 уровня, а третий уже пишется в первый.
Проблема вот тут:
Тут должна быть запись в child предыдущего элемента. Но как сохранить путь до этого элемента для записи - ума не приложу.
Есть БД. В ней item имеет id и pid для древовидной структуры. Вот как раз и пытаюсь написать ф-ю такую, что бы база преображалась в вид:
PHP:
array
0 =>
( 'id_item' => 134,
'pid' => 0,
'child' =>
array
0 =>
( 'id_item' => 33,
'pid' => 134
'child' =>
array
0 =>
Вот код. Вкладывается только 2 уровня, а третий уже пишется в первый.
PHP:
public function tree_items2($pid = 0) {
//todo переписать
$object = array();
$this->pid = $pid;
$query = "SELECT *
FROM " . $this->DB->tbl_prefix . "sklad_items
WHERE pid = :pid
ORDER BY name";
$object['pid'] = $this->pid;
$result = $this->DB->Select($query, $object);
if ($result) {
$i = 0;
foreach ($result as $row) {
$c_object = array();
$c_query = "SELECT *
FROM " . $this->DB->tbl_prefix . "sklad_items AS items
WHERE items.pid = :id_item";
$c_object['id_item'] = $row['id_item'];
$items_child = $this->DB->Select($c_query, $c_object);
if ($items_child[0]['id_item'] > 0) {
$row['child'] = $items_child;
$this->items[] = $row;
$this->tree_items2($items_child[0]['id_item']);
} else {
$this->items[] = $row;
}
}
} else {
return false;
}
return $this->items;
}
PHP:
else {
$this->items[] = $row;
}