2010-03-28 171 views
5

我有問題,在同一陣列上兩次迭代:嵌套的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

在此先感謝

回答

9

我的第一個instict是不使用foreach循環。我相信PHP正在使用一些內部指針,因此兩個foreach循環會影響彼此的位置。而是使用正常的循環。

+3

感謝理查德,我用一個正常的替換了第一個foreach,它工作。我不能相信PHP在這樣一個簡單的結構中有這麼大的BUG ...... – Neuquino 2010-03-28 14:43:28

+2

這不是一個錯誤,它記錄在php.net/foreach上:注意:除非數組被引用,否則foreach在副本上運行指定數組,而不是數組本身。 foreach對數組指針有一些副作用。不要在foreach期間或之後依賴數組指針而不重置它。 – 2010-03-28 14:48:07

+5

是否有記錄,這是一個BUG。這種行爲不直觀,沒有人會期望這段代碼的結果。 PHP應該爲每個foreach結構使用不同的指針。 – Neuquino 2010-03-28 15:04:55

2

根據你的代碼,似乎你實際上並不想在outher循環中使用foreach循環。只要做一個從0到數組大小的常規循環。事情是這樣的:

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

是的,這將是我的代碼的一個解決方案。但我想知道我這是不工作... – Neuquino 2010-03-28 15:00:50

0

我相信泰德第二循環應該看起來像與否

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

否則你不使用從第一循環anyware $ commision1其

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

相關

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

我用它來迭代...它將從1到count($ comisiones)for循環相同... – Neuquino 2010-03-28 14:59:38

0

使用正常的,有兩個指標的環,就像這樣:

$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循環每次都重置數組指針,這就是爲什麼你只出現一個可怕的混亂。 :)