【问题标题】:AND in a PHP foreach loop?AND 在 PHP foreach 循环中?
【发布时间】:2011-06-12 18:47:35
【问题描述】:

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

例如,

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

【问题讨论】:

标签: php loops foreach operators


【解决方案1】:

您始终可以使用循环计数器访问第二个数组中的相同索引,就像您在 foreach 循环中访问一样(我希望这是有道理的)。

例如:-

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

这应该可以实现您想要做的事情,否则请使用 dark_charlie 建议的方法。

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

【讨论】:

  • 谢谢,正是我想要的。
【解决方案2】:

简短的回答:不。您总是可以将书签和标签放在一个数组中并对其进行迭代。

或者你也可以这样做:

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;
}

【讨论】:

  • 请你提供一个例子。
【解决方案3】:

你不能这样做。

但你可以

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

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

或选项 2

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

      没有。不,不是。

      您必须手动编写一个使用索引或内部指针同时遍历两个数组的循环。

      【讨论】:

        【解决方案6】:

        是的,为了完整性:

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

        这将是获得您想要的东西的本机方式。但很明显,它只有在两个输入数组的长度完全相同的情况下才有效。

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

        【讨论】:

          猜你喜欢
          • 2014-10-19
          • 2016-09-26
          • 2012-07-19
          • 1970-01-01
          • 2015-12-10
          • 1970-01-01
          • 2014-03-15
          • 1970-01-01
          • 2022-01-25
          相关资源
          最近更新 更多