在PHP foreach循环中?

时间:2011-06-12 18:47:35

标签: php loops foreach operators

是否可以在foreach循环中使用AND?

例如,

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

6 个答案:

答案 0 :(得分:4)

你可以随时使用循环计数器来访问第二个数组中的相同索引,就像你在foreach循环中访问一样(我希望这是有意义的)。

例如: -

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

这应该达到你想要做的,否则使用dark_charlie冒充的方法。

在PHP 5> = 5.3中,您可以使用MultipleIterator

答案 1 :(得分: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;
}

答案 2 :(得分:0)

你做不到。

但你可以

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

如果您有一个hash类型的数组,上面的示例效果很好但是如果您在数组中有嵌套值,我建议您:

或选项2

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

没有。不,不是。

你必须手动写出一个循环,它使用索引或内部指针同时遍历两个数组。

答案 5 :(得分:0)

是的,为了完整性:

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

这将是获得你想要的本地方式。但它只有在两个输入数组的长度完全相同时才有效。

(但是,使用单独的迭代键是更常用的方法。)