У меня возникают проблемы с повторением итерации в одном массиве:
<? $indice=0 ?> <?php foreach ($comisiones as $comision1):?> <tr> <td><?php echo ++$indice ?></td> <td><?php echo tag('select',array('name'=>'comision_'.$indice),true)?> <?php foreach ($comisiones as $comision2):?> <option value="<?php echo $comision2->getId()?>"> <?php echo $comision2->getNombre()." - ".$comision2->getDescripcion()?> </option> <?php endforeach?> </select> </td> </tr> <?php endforeach?>
Вышеприведенный код печатает:
результат кода http://img440.imageshack.us/img440/7732/res.png
И я ожидаю увидеть что-то вроде этого (метки комбо в изображениях не то же самое, но я думаю, что идея понятна):
ожидаемые результаты http://img229.imageshack.us/img229/7969/esperado.png
заранее спасибо
Мой первый инстинкт не использует петли foreach
. Я считаю, что PHP использует некоторые внутренние указатели, поэтому две петли foreach
влияют на положение друг друга. Вместо этого используйте обычный цикл.
На основе вашего кода кажется, что вам действительно не нужен цикл foreach в цикле outher. Просто сделайте регулярный цикл от 0 до размера массива. Что-то вроде этого:
for ($i = 0; $i < count($comisiones); ++$i) { // Do what you want }
Я полагаю, что вторая петля должна выглядеть или связана с ней
<?php foreach ($comision1 as $comision2): ?>
не
<?php foreach ($comisiones as $comision2): ?>
в противном случае вы не используете $ commision1 из первого цикла anyware
<?php foreach ($comisiones as $comision1): ?>
Используйте обычные для циклов с двумя индексами, например:
$len = count($comisiones); for($i = 0; $i < $len; ++$i) for($j = 0; $j < $len; ++$j)
Как четко указано на веб-сайте PHP:
"Примечание: Когда foreach сначала запускает выполнение, внутренний указатель массива автоматически возвращается к первому элементу массива." [источник: http://www.php.net/manual/en/control-structures.foreach.php ]
Поэтому ваш внутренний цикл foreach сбрасывается каждый раз при указателе массива, поэтому вы получаете только ужасный беспорядок. 🙂