И в цикле PHP foreach? - PullRequest
       6

И в цикле PHP foreach?

1 голос
/ 12 июня 2011

Возможно ли иметь И в цикле foreach?

Например,

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

Ответы [ 6 ]

4 голосов
/ 12 июня 2011

Вы всегда можете использовать счетчик цикла для доступа к тому же индексу во втором массиве, к которому вы обращаетесь в цикле 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 голос
/ 12 июня 2011

Краткий ответ: нет.Вы всегда можете поместить закладки и теги в один массив и перебрать его.

Или вы также можете сделать это:

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 голосов
/ 13 июня 2011

Да, для полноты:

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

Это был бы родной способ получить то, что вы хотите.Но это работает только в том случае, если оба входных массива имеют одинаковую длину, очевидно.

(однако использование отдельного ключа итерации - более распространенный подход.)

0 голосов
/ 12 июня 2011

Нет. Нет, это не так.

Вам придется вручную выписать цикл, который использует индексы или внутренние указатели для одновременного обхода обоих массивов.

0 голосов
/ 12 июня 2011

Нет, но есть много способов сделать это, например:

reset($tags_latest);
foreach ($bookmarks_latest as $bookmark){
    $tags = current($tags_latest); next($tags_latest);
    // here you can use $bookmark and $tags
}
0 голосов
/ 12 июня 2011

вы не можете сделать это.

, но вы можете

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

приведенный выше пример работает очень хорошо, если у вас есть массив типа hash, но если у вас есть вложенные значения вмассив, который я вам рекомендую:

или вариант 2

<?php
foreach ($keyval as $kv) {
 list($val1, $val2, $valn) = $kv;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...