Почему с данным кодом PHP скрипт зависает?

Выполнение данного кода приводит к бесконечной загрузке. Почему?
$games_list = array();
$games_list[0]['status'] = 1;
$games_list[0]['time'] = time();

if(count($games_list) != 0) 
{
    for($a = 0; $a != count($games_list); $a++)
    {
        if(isset($games_list[$a]['status'])) unset($games_list[$a]);
    }
}
  • Вопрос задан
  • 235 просмотров
Решения вопроса 1
27cm
@27cm
TODO: Написать статус
Потому что условие $a != count($games_list) всегда будет выполняться, т. к. на первой итерации цикла после unset($games_list[$a]) в массиве ничего не останется и count($games_list) будет давать 0.

Перепишите код вот так:
for ($a = 0, $count = count($games_list); $a != $count; $a++) {
    if (isset($games_list[$a]['status'])) unset($games_list[$a]);
}


Или так:
foreach ($games_list as $a => $game) {
    if (isset($game['status'])) unset($games_list[$a]);
}


Или даже так:
$games_list = array_filter($games_list, function ($game) {
    return !isset($game['status']);
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
nalomenko
@nalomenko
Руководитель отдела разработок в студии «Lava»
Потому-что при первом проходе цикла count($games_list) == 1; $a == 0;. Условие неравенства выполняется.

При втором проходе (поскольку массив уменьшился) будет так: count($games_list) == 0; $a == 1;, то есть условие неравенства выполняется опять. Ну и так далее.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы