Как объединить две петли foreach в одну? - PullRequest
8 голосов
/ 01 апреля 2010

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

Ответы [ 4 ]

22 голосов
/ 01 апреля 2010

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

, например

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

печать

1 | 11
2 | 12
3 | 13
4 | 14
5 | 15
6 | 16
9 голосов
/ 28 марта 2013

1) Первый метод

<?php
$FirstArray = array('a', 'b', 'c', 'd');
$SecondArray = array('1', '2', '3', '4');

foreach(array_combine($FirstArray, $SecondArray) as $f => $n) {
    echo $f.$n;
    echo "<br/>";
}
?>

или 2) Второй метод

<?php
$FirstArray = array('a', 'b', 'c', 'd');
$SecondArray = array('1', '2', '3', '4');

for ($index = 0 ; $index < count($FirstArray); $index ++) {
  echo $FirstArray[$index] . $SecondArray[$index];
  echo "<br/>";
}
?>
3 голосов
/ 01 апреля 2010

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

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) {
  ...
}

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

0 голосов
/ 01 апреля 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...