在PHP问题中嵌套foreach

时间:2010-03-28 14:34:10

标签: php foreach

我在同一个数组上迭代两次有问题:

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

以上代码打印:

code result http://img440.imageshack.us/img440/7732/res.png

而且我期待看到类似的东西(图像中组合的标签不一样,但我认为这个想法很清楚):

expected results http://img229.imageshack.us/img229/7969/esperado.png

提前致谢

4 个答案:

答案 0 :(得分:9)

我的第一直觉是不要使用foreach循环。我相信PHP正在使用一些内部指针,因此两个foreach循环会影响彼此的位置。而是使用普通的for循环。

答案 1 :(得分:2)

根据您的代码,您似乎并不想在外部循环中使用foreach循环。只需执行从0到数组大小的常规for循环。像这样:

for ($i = 0; $i < count($comisiones); ++$i) {
    // Do what you want
}

答案 2 :(得分:0)

我认为第二个循环应该与

相似或相关
<?php foreach ($comision1 as $comision2): ?>

不是

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

否则你不是从第一个循环anyware使用$ commision1

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

答案 3 :(得分:0)

使用带有两个索引的normal for循环,如下所示:

$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循环,这就是为什么你只是一个可怕的混乱。 :)