2011-06-12 155 views
1

是否有可能在foreach循環中有AND?和在PHP foreach循環?

例如,

foreach ($bookmarks_latest as $bookmark AND $tags_latest as $tags) 
+0

我不明白什麼樣的情況會要求這樣。但你不能這樣做。你想做什麼? – Rob 2011-06-12 18:50:38

+0

請參考此其他問題:http://stackoverflow.com/questions/6313340/codeigniter-passing-arguments-from-view-to-controller – ritch 2011-06-12 18:53:44

回答

3

您可以隨時使用循環計數器訪問第二個數組中的相同索引,就像您在foreach循環中訪問的那樣(我希望這很有意義)。

例如: -

$i = 0; 
foreach($bookmarks_latest as $bookmark){ 
    $result['bookmark'] = $bookmark; 
    $result['tag'] = $tags_latest[$i]; 
    $i++; 
} 

那應該達到什麼樣的你正在嘗試做的,否則使用由dark_charlie sugested的辦法。

+0

謝謝,正是我正在尋找的。 – ritch 2011-06-12 19:06:55

1

簡短的回答:沒有。您始終可以將書籤和標籤放入一個數組中並對其進行迭代。

或者你也可以這樣做:

reset($bookmarks_latest); 
reset($tags_latest); 
while ((list(, $bookmark) = each($bookmarks_latest)) && (list(,$tag) = each($tags_latest)) { 
    // Your code here that uses $bookmark and $tag 
} 

編輯:
爲一個陣列的解決方案所要求的例子:

class BookmarkWithTag { 
    public var $bookmark; 
    public var $tag; 
} 

// Use the class, fill instances to the array $tagsAndBookmarks 


foreach ($tagsAndBookmarks as $bookmarkWithTag) { 
    $tag = $bookmarkWithTag->tag; 
    $bookmark = $bookmarkWithTag->bookmark; 
} 
+0

請你可以提供一個這樣的例子。 – ritch 2011-06-12 18:51:04

0

你不能做到這一點。

,但你可以

<?php 
foreach($keyval as $key => $val) { 
    // something with $key and $val 
} 

上面的例子中的作品真的很好,如果你有一個hash類型的數組,但如果你已經在數組中嵌套值我建議你:

或選項2

<?php 
foreach ($keyval as $kv) { 
list($val1, $val2, $valn) = $kv; 
} 
0

不,但有很多方法可以做到這一點,例如:

reset($tags_latest); 
foreach ($bookmarks_latest as $bookmark){ 
    $tags = current($tags_latest); next($tags_latest); 
    // here you can use $bookmark and $tags 
} 
0

不,不是。

您必須手動寫出一個使用索引或內部指針同時遍歷兩個數組的循環。

0

是的,對於完整性:

foreach (array_combine($bookmarks_latest, $tags_latest) as $bookm=>$tag) 

這將是得到你想要的本機方式。但它只有在兩個輸入數組具有完全相同的長度時纔有效。 (使用單獨的迭代密鑰是更常見的方法,但是。)