[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: зациклить foreach
amename
здравствуйте!

есть массив res1s с вложенными элементами меню —

res1s

id=1 parent=0
id=2 parent=1
id=3 parent=2
id=4 parent=3
...
id=5 parent=0
id=6 parent=5


на входе для фильтрации цикл получает конкретный ID ($ID ), напр.

$ID = 1


$values = array();
foreach ($res1s as $res1) {
if ($res1->parent == $ID) {
$values[] = $res1->id;
foreach ($res1s as $res2) {
if ($res2->parent == $res1->id) {
$values[] = $res2->id;
}
}
}
}



задача — получить всех потомков $ID на всех уровнях вложенности
в вышеприведённом примере потомки определяются только на два уровня ниже
т.к глубина вложенности неизвестна, нужно как-то написать функцию на вход которой подавать массив res1s + $ID так чтобы функция делала обход покуда находятся подходящие записи в массиве

в данном случае, при

$ID = 1

в $values должно получится array(2, 3, 4)

спасибо!
brevis
https://glot.io/snippets/ehslo7lhmt
Допили сам если че.

_____________
Чатик в телеге
amename

Цитата
Допили сам если че.


)) ! спасибище!!
TMake
amename посмотри лучше в сторону nestedset, так тебе не придется играться с циклами.
По твоему вопросу:


function getRes($array $parent)
{
$result = [];
if (!empty($array)) {
foreach ($array as $item) {
if ($item->parent == $parent) {
$result[] = $item->id;
$result = array_merge_recursive($result, getRes($array, $item->parent));
}
}
}


return $result;
}
amename
TMake, и тебе спасибо!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.