和在PHP foreach循环中?

问题描述

| 在foreach循环中可以有一个AND吗? 例如,
foreach ($bookmarks_latest as $bookmark AND $tags_latest as $tags)
    

解决方法

        您始终可以使用循环计数器来访问第二个数组中与在foreach循环中访问的索引相同的索引(我希望这样做很有意义)。 例如:-
$i = 0;
foreach($bookmarks_latest as $bookmark){
   $result[\'bookmark\'] = $bookmark;
   $result[\'tag\'] = $tags_latest[$i];
   $i++;
}
那应该可以实现您要尝试的操作,否则请使用dark_charlie推荐的方法。 在PHP 5> = 5.3中,您可以使用MultipleIterator。     ,        简短的回答:不。您始终可以将书签和标签放入一个数组中并对其进行迭代。 或者,您也可以这样做:
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;
}
    ,        你不能那样做。 但是你可以
<?php
foreach($keyval as $key => $val) {
  // something with $key and $val
}
如果您有一个
hash
类型的数组,则上面的示例非常有效,但是如果数组中有嵌套值,我建议您: 或选项2
<?php
foreach ($keyval as $kv) {
 list($val1,$val2,$valn) = $kv;
}
    ,        不,但是有很多方法可以做到这一点,例如:
reset($tags_latest);
foreach ($bookmarks_latest as $bookmark){
    $tags = current($tags_latest); next($tags_latest);
    // here you can use $bookmark and $tags
}
    ,        不,不是。 您将必须手动编写一个循环,该循环使用索引或内部指针同时遍历两个数组。     ,        是的,出于完整性考虑:
foreach (array_combine($bookmarks_latest,$tags_latest) as $bookm=>$tag)
那将是获得所需东西的本机方法。但是,仅当两个输入数组的长度完全相同时,它才有效。 (但是,使用单独的迭代键是更常见的方法。)