2011-06-12 158 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) 

这将是得到你想要的本机方式。但它只有在两个输入数组具有完全相同的长度时才有效。 (使用单独的迭代密钥是更常见的方法,但是。)