2010-02-12 138 views
0

是否有可能在每個partent中包含的foreach循環內使用索引值。看下面的腳本,並觀察在每個孩子我使用echo'<div>' .$product['name'] . '</div>';$product[' name '];屬於每個父母。那可能嗎?我正在尋找使用兒童foreach()中的索引['name ']display ['name']在來自另一個循環的foreach循環內

foreach($tree as $product){ 

    echo '<div>' . $product['name']. '</div>'; 

    foreach($product['variery'] as $variety) 

    { 
     echo'<div>'. $variery['image'] . '</div>'; 
     echo'<div>' .$product['name'] . '</div>'; 

    } // end of child for each 

} //end of parent for each 
+3

我不確定是否正確理解您的問題。如果我這樣做,那麼是的,這是可能的,你是對的。實際上你運行的代碼?有什麼問題嗎? – 2010-02-12 14:55:01

+0

嘿felix是的我的意思是,我沒有測試它我想確保在執行之前 – jona 2010-02-12 17:59:44

+0

那麼你不會破壞任何東西,所以沒有問題之前沒有試圖問。我的意思是,編程經常是嘗試和錯誤。但是,在你嘗試......之前,你不應該問你。是的,你在評論中提出的其他事情也是可能的。 – 2010-02-12 18:13:34

回答

0

是的,如果你在一個父循環定義一個變量,那麼它會在任何兒童循環保留其值,只要這些孩子環路本身並不重新定義變量。就內部循環而言,$ product在循環的生命週期中是一個「本地」常量,因此$ product ['name']和$ product ['variery']不會更改,直到下一次迭代循環。

作爲次要的性能提示,您不必在echo語句中進行字符串連接。 echo將接受多個逗號分隔值。下面的工作完全一樣,而不是有兩個級聯的開銷:

echo '<div>', $product['name'], '</div>'; // notice the commas 

這是次要的,但如果這成爲一個經常出入的代碼路徑,保存在任何週期是一件好事。

+0

Marc你的意思是,而不是像 value =「'。$ variety ['price']。'_'。$ variety ['variety']。'_'$ product ['name']。' 「 我可以easely做到這一點通過comman分隔值,如: 值=」',$品種[ '價格'],$品種[ '品種'],$產物[ '名稱']'」 – jona 2010-02-12 17:58:07

+0

下面的值將進入foreach子循環中 value =「',$ variety ['price'],$ variety ['variety'],$ product ['name']',' – jona 2010-02-12 18:01:36

+0

不,僅逗號分隔適用於echo命令,但其餘部分保持不變,只要不覆蓋子循環內的$ product變量,它將對子循環的所有迭代具有相同的值。 – 2010-02-12 20:13:55

2

是的,這是可能的。

即使在循環外面定義了$product(最後一個值仍保持賦值)。

問題點評:我也可以這樣做嗎?

value="', $variety['price'], $variety['variety'], $product['name'],'"; 

上述代碼將進入子循環。

答案: 是的,但是這種語法會導致錯誤。要在雙引號中使用關聯數組,請跳過單引號。

value="', $variety[price], $variety[variety], $product[name],'"; 

還是用點:

value="', " . $variety[price] . ", " . $variety[variety] . ", " . $product[name] . ",'"; 
+0

我也可以這樣做嗎? value =「',$ variety ['price'],$ variety ['variety'],$ product ['name']'', 上面的代碼會進入子循環。 – jona 2010-02-12 18:00:32