Гайд Алгоритмы перебора массивов

Модератор раздела Рынок
Модератор
Статус
Оффлайн
Регистрация
27 Апр 2019
Сообщения
105
Реакции[?]
47
Поинты[?]
6K
Итак, это мини статься про то как устроен перебор массива чем отличаются функции друг от друга на наглядных примерах с хорошим объяснением!
Приятного чтения 😁
Быстрые алгоритмы перебора массива
Перебор массива — это основная операция, которая встречается во многих задачах программирования. От эффективности этого процесса часто зависит производительность программы. Основные методы перебора массива:

1. Цикл for
  • Классический способ перебора с индексами. Подходит, когда необходимо управлять шагом, начальным или конечным значением.
PHP:
$arr = [1, 2, 3, 4, 5];
for ($i = 0; $i < count($arr); $i++) {
    echo $arr[$i];
}
2. Цикл foreach
  • Специальный цикл для перебора элементов коллекций (массивов, объектов). Он автоматически проходит по каждому элементу и удобен для простого доступа к элементам массива.
PHP:
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $value) {
    echo $value;
}
3. Цикл while
  • Универсальный цикл, который продолжает выполнение, пока истинно условие. Хорош для ситуаций, когда нужно контролировать цикл с помощью логических условий, а не просто пройти по всем элементам.
PHP:
$arr = [1, 2, 3, 4, 5];
$i = 0;
while ($i < count($arr)) {
    echo $arr[$i];
    $i++;
}
Отличия между while и foreach
  1. Назначение:
    • while универсален и подходит для любых ситуаций, где нужно повторять действия, пока выполняется условие. Это не только перебор массива.
    • foreach создан для удобного перебора массивов и объектов, делая код более читабельным и компактным.
  2. Простота:
    • foreach автоматически предоставляет доступ к элементам массива, без необходимости отслеживания индекса.
    • while требует ручного управления индексом или состоянием, что может усложнить код.
  3. Гибкость:
    • while можно использовать в более сложных сценариях, например, когда нужно досрочно завершить цикл или пропускать итерации в зависимости от условий.
    • foreach идеально подходит для простого и понятного перебора, но менее гибок в сравнении с while.
Примеры
1. while — перебор массива с досрочным завершением:​
PHP:
$arr = [1, 2, 3, 4, 5];
$i = 0;
while ($i < count($arr)) {
    if ($arr[$i] == 3) {
        break; // Прерываем цикл, когда встречаем 3
    }
    echo $arr[$i];
    $i++;
}
2. foreach — простой перебор элементов:​
PHP:
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $value) {
    echo $value;
}
Какой итог?
Хочу сказать в плане перебора массивов в преимуществе нужно использовать foreach т.к он предназначен для этого, ибо движок сразу получает набор инструкций, нежели с не предсказуемым while.

Код скрипта который замеряет скорость обеих функций, вы можете запустить и проверить кто быстрее.
PHP:
<?php

ini_set('memory_limit', '-1');
// Исходный массив
$arr = range(1, 100000000); // Массив из 100 миллионов элементов

// Измерение времени выполнения foreach
$start = microtime(true);
foreach ($arr as $value) {
    $temp = $value;
}
$timeForeach = microtime(true) - $start;

// Измерение времени выполнения while
$start = microtime(true);
$i = 0;
while ($i < count($arr)) {
    $temp = $arr[$i];
    $i++;
}
$timeWhile = microtime(true) - $start;

echo "foreach: $timeForeach сек\n";
echo "while: $timeWhile сек\n";
Output:
foreach: 3.1434059143066 сек
while: 4.4497950077057 сек


Разница почти в секунду не такая уж и большая скажете вы, но это лишь набор чистых цифр, на длинной дистанции выигрывает foreach.

Спасибо, что прочитали статью! Я старался, всем добра.
 
Сверху Снизу