我在同一个数组上迭代两次有问题:
<? $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
提前致谢
答案 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循环,这就是为什么你只是一个可怕的混乱。 :)