вложенный foreach в PHP-задаче - PullRequest
5 голосов
/ 28 марта 2010

У меня проблемы с повторением дважды в одном массиве:

<? $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

Заранее спасибо

Ответы [ 4 ]

9 голосов
/ 28 марта 2010

Мой первый инстинкт - не использовать петли foreach. Я считаю, что PHP использует некоторые внутренние указатели, поэтому два цикла foreach влияют на положение друг друга. Вместо этого используйте обычный цикл for.

2 голосов
/ 28 марта 2010

На основании вашего кода кажется, что вы фактически не хотите цикл foreach в цикле outher. Просто сделайте обычный цикл for от 0 до размера массива. Примерно так:

for ($i = 0; $i < count($comisiones); ++$i) {
    // Do what you want
}
0 голосов
/ 28 марта 2010

Использовать нормальное значение для циклов с двумя индексами, например:

$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 сбрасывается каждый раз, когда указатель массива, поэтому вы получаете только ужасный беспорядок. :)

0 голосов
/ 28 марта 2010

Я верю, что вторая петля должна выглядеть или иметь отношение к

<?php foreach ($comision1 as $comision2): ?>

не

<?php foreach ($comisiones as $comision2): ?>  

в противном случае вы не используете $ commision1 из любого первого цикла

<?php foreach ($comisiones as $comision1): ?>  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...