Как заставить foreach обработать предыдущий объект?

Samail
На сайте с 10.05.2007
Offline
361
496

В массиве среди прочего есть значения:

$k (id),

$v['nexst'] (ID другого объекта, имеется не у всех объектов)

Выводится информация по одному объекту

<?php if($k==$id): ?>

….
<?php endif; ?>

Нужно что-бы, если содержится $v['nexst'] выводить информацию и по объекту ID которого совпадает с этим значением. Если у следующего тоже есть $v['nexst'] то и по нему тоже и так пока все нексты не закончатся.

Пробую так:

<?php if($k==$id): ?>

….
<?php $next=$v['next']; ?>
<?php endif; ?>

<?php if($k==$next): ?>
<?php echo $k; ?>
<?php $next=$v['next']; ?>
<?php endif; ?>

Если у $next значение больше чем $k то работает, но оно может быть и меньше, а скрипт этот объект уже пропустил. Нужно сделать так, что-бы он к нему вернулся, вывел информацию и перешел к следующему $next если он там есть.

siv1987
На сайте с 02.04.2009
Offline
427
#1

Насколько я понял, вам повторно нужно запустить цикл и искать объекты у которых совпадают id. Но задача изложена довольно корява, покажите структуру массива (print_r) и укажите на ней что вам нужно вывести.

ДП
На сайте с 23.11.2009
Offline
203
#2

Очень похоже на вывод какой-то древовидной структуры. Если я прав - то тут либо рекурсия, если данные хранятся как я понял из вашего описания, либо, если есть возможность - то изменить способ хранения (всякие nested sets, materialized path, adjustency list)

Samail
На сайте с 10.05.2007
Offline
361
#3
siv1987:
Насколько я понял, вам повторно нужно запустить цикл

Вроде сработало так:

<?php foreach($cart as $k => $v): ?>  

<?php if($k==$next): ?>
<?php echo $k; ?>
<?php $next=$v['next']; ?>
<?php endif; ?>
<?php endforeach; ?>


---------- Добавлено 27.10.2015 в 17:19 ----------

...правда время выполнения скрипта увеличилось в 43 раза

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий