Сравнить значение массива в цикле foreach

247
01 июля 2017, 12:01

Необходимо в цикле foreach проверить значение массива на текущей итерации с последуйщей.

К примеру мой цикл: foreach ($products as $product)

И нужно текущее поле $product['model'] сравнить с следуйщим. Как написать условие?

Answer 1

Гораздо проще сравнивать с предыдущей.

$last = null;
foreach ($products as $product) {
    if($product['model'] === $last){
        echo "YES!";
    }
    $last = $product['model'];
}

Если прям надо со следующим, то

reset($products);
for($i = 0; $i < count($products) - 1; ++$i) {
    $current = current($products);
    $next = next($products);
    if ($current['model'] === $next['model']) {
        echo "YES!";
    }
}

Сравнивать с предыдущим и последующим

$last = null;
reset($products);
for($i = 0; $i < count($products) - 1; ++$i) {
    $current = current($products);
    $next = next($products);
    if ($current['model'] === $next['model']) {
        echo "NEXT MATCHES";
    }
    if ($current['model'] === $last) {
        echo "LAST MATCHES";
    }
    $last = $current['model'];
}
Answer 2

Если вы используете индексный массив, то проще всего воспользоваться циклом for:

for ($i = 0; $i < count($products) - 1; $i++) {
    if($products[$i]['model'] === $products[$i + 1]['model']) {
        echo('Same');
    }
}
Answer 3

А почему бы не использовать классический цикл while?

Например вот так:

reset($products);
while($current = current($products)) {
    $next = next($products);
    if ($next && $next['model'] === $current['model']) {
        echo('Same');
    }
}
READ ALSO
Сервер не принимает данные от клиента

Сервер не принимает данные от клиента

здравствуйте, пишу клиент-серверное приложение, в итоге для каждого соединения хочу брать поток из QThreadPool

315
Использование iostream_operator для записи в файл

Использование iostream_operator для записи в файл

Здравствуйте, я пытаюсь записать и прочитать созданный класс WRstrcut, используя ostream_iterator и istream_iteratorС записью проблем нет, а вот с чтением есть

277
Не компилится solidity

Не компилится solidity

Компилирую вот по этому мануВылетает такая ошибка:

269
C++ Почему не работает предварительное объявление класса?

C++ Почему не работает предварительное объявление класса?

Мне главное чтобы я мог из любого класса связаться с объектом любого другого класса (для этого я делаю наследование)Но запутался как правильно...

288