Проверяем отстутствие элемента массива в PHP
Давайте теперь попробуем сделать так, чтобы,
если в массиве вообще нет элементов со значением
3
, выводилось 'нет'
. Распространенным
заблуждением будет добавить else
к
нашему ифу - в этом случае 'нет'
будет
выводиться на все элементы, не являющиеся
3
:
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo 'есть'; // выведет на элементе 3
} else {
echo 'нет'; // выведет на элементах 1, 2, 4, 5
}
}
?>
Итак, идея добавить else
- плохая
идея, не рабочая. Для решения задач подобного
типа и используют переменные-флаги.
Давайте сделаем такую переменную со следующем
поведением: если она равна true
, то
в массиве есть элемент 3
, а если false
,
то такого элемента нет. Изначально поставим
наш флаг в значение false
- то есть
будем считать, что элемента 3
в массиве
нет:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false; // считаем, что элемента 3 в массиве нет
?>
Затем запустим цикл с ифом так, как мы делали
это раньше. Если цикл обнаружит, что в массиве
есть элемент 3
- то поставим переменную
$flag
в значение true
и выйдем
из цикла с помощью break
:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false; // считаем, что элемента 3 нет в массиве
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true; // элемент есть - переопределим переменную $flag
break; // выйдем из цикла
}
}
?>
Ответ на вопрос, есть ли в массиве 3
или нет, мы можем дать только после цикла.
И этот ответ у нас уже есть: после цикла
переменная $flag
могла остаться false
или могла сменить свое значение на true
,
если цикл обнаружил в массиве 3
:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false;
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true;
break;
}
}
// тут переменная $flag равна или true, или false
?>
Теперь после цикла мы можем сделать иф, который
посмотрит на переменную $flag
и выведет
на экран 'есть'
или 'нет'
:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false;
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true;
break;
}
}
if ($flag === true) {
echo 'есть';
} else {
echo 'нет';
}
?>
Дан массив:
<?php
$arr = ['a', 'b', 'c', 'd', 'e'];
?>
Проверьте, что в этом массиве есть элемент
'c'
. Если есть - выведите 'да'
,
а если нет - выведите 'нет'
.