Как Вы комбинируете два цикла foreach в один

Язык является PHP. У меня есть один foreach ($a как $b) и другой foreach ($c как $d => $e). Как я комбинирую их для чтения как один. Я усталый foreach (($a как $b) && ($c как $d => $e)), но это - мусор.

8
задан Kendall Hopkins 7 October 2011 в 19:46
поделиться

3 ответа

Вас может заинтересовать SPL's MultipleIterator

например,

// ArrayIterator is just an example, could be any Iterator.
$a1 = new ArrayIterator(array(1, 2, 3, 4, 5, 6));
$a2 = new ArrayIterator(array(11, 12, 13, 14, 15, 16));

$it = new MultipleIterator;
$it->attachIterator($a1);
$it->attachIterator($a2);

foreach($it as $e) {
  echo $e[0], ' | ', $e[1], "\n";
}

prints

1 | 11
2 | 12
3 | 13
4 | 14
5 | 15
6 | 16
22
ответ дан 5 December 2019 в 05:08
поделиться

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

foreach ($a as $b) { ... }
foreach ($c as $d => $e) { ... }

Если вам нужны все комбинации из $ a и $ c :

foreach ($a as $b) {
  foreach ($c as $d => $e) {
    // do stuff
  }
}

Я думаю, вы могли бы сделать что-то вроде:

foreach (array_merge($a, $c) as $k => $v) {
  ...
}

но я бы не советовал.

3
ответ дан 5 December 2019 в 05:08
поделиться

Думаю, это сделает то, что вы хотите. Оба массива будут продвигаться одинаково одновременно по всему циклу. Вы всегда можете разбить вручную, если $ c имеет другой размер, чем $ a , и вам нужно разбить логику на основе размера массива:

foreach($a as $b)
{
    list($d,$e) = each($c);
    //continue on with $b, $d and $e all set
}

each () будет продвигать указатель массива $ c на каждой итерации.

0
ответ дан 5 December 2019 в 05:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: