Что быстрее for или foreach в php?

Пользователь

от guillermo , в категории: PHP , 2 года назад

Что быстрее for или foreach в php?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от dmitrypro77 , 2 года назад

@guillermo Все будет конечно зависеть от содержимого цикла (что происходит внутри цикла), но если просто пройтись по массиву, то ниже Вы можете посмотреть простой пример замера и можно видеть что for цикл будет работать быстрее, что в принципе ожидаемо:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
<?php

$data = [];
for ($i = 0; $i < 100000000; $i++) {
    $data[] = $i;
}

$start = microtime(true);
foreach ($data as $value) {
}
echo "Foreach выполнен ", microtime(true) - $start, " секунд" . PHP_EOL;

$start = microtime(true);
for ($i = 0; $i < 100000000; $i++) {
}
echo "For выполнен ", microtime(true) - $start, " секунд\n";

// Результат:
// Foreach выполнен 0.48601102828979 секунд
// For выполнен 0.2732310295105 секунд


Тестировался выше код на PHP

1
PHP 8.1.2 (cli) (built: Jul 21 2022 12:10:37) (NTS)
Всегда открыт для интересных проектов. Ссылки на мои соц. сети в профиле.

Пользователь

от mona_terry , год назад

@guillermo 

Оба цикла for и foreach имеют разные особенности и влияют на производительность в зависимости от контекста.


Цикл for подходит для работы с числовыми индексами и предоставляет больше гибкости и контроля над итерацией. При использовании цикла for необходимо явно указывать начальное значение, условие остановки и инкремент/декремент значения переменной-счетчика. В ситуациях, когда нужно проходиться по числовому диапазону с заданным шагом, цикл for может быть более эффективным.


Напротив, цикл foreach предназначен для работы с итерируемыми объектами, такими как массивы или коллекции. Он автоматически проходится по всем элементам структуры данных, не требуя явного указания счетчика и условия остановки. Цикл foreach удобен в использовании, особенно когда нужно работать с каждым элементом массива или коллекции. Он также поддерживает работу с ассоциативными массивами, позволяя получать ключи и значения для каждой итерации.


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