В реальных программах, если нет уверенности, что ключ существует, нужно обязательно производить его проверку используя уже знакомую нам функцию array_key_exists()
.
<?php
$user = ['name' => 'Vasya', 'married' => true, 'age' => 25];
if (array_key_exists('name', $user)) {
print_r('yeah!');
} else {
print_r('no');
}
// => yeah!
Рассмотрим пример функции, которая должна посчитать количество повторяющихся элементов в массиве:
<?php
// Вход
$fruits = [
'apple', 'banana', 'pear',
'apricot', 'apple', 'banana',
'apple', 'orange', 'pear'
];
// Выход
$result = [
'apple' => 3,
'banana' => 2,
'pear' => 2,
'orange' => 1,
'apricot' => 1
];
Алгоритм ее работы достаточно прост, но есть один тонкий момент. Во время обхода массива эта функция берет массив-результат, извлекает из него нужный ключ и увеличивает значение на единицу. Но это в случае, когда ключ уже есть. А если его нет? Так как изначально массив-результат пустой, то когда элемент массива появляется первый раз, в массиве-результате нужно создавать соответствующий ключ со значением 1. Посмотрите на реализацию:
<?php
function countFruits($fruits)
{
$result = [];
foreach ($fruits as $name) {
// Проверка на существование
if (array_key_exists($name, $result)) {
$result[$name] += 1;
} else {
$result[$name] = 1;
}
}
return $result;
}
Оператор объединения с null
Конкретно в нашем примере с перебором фруктов, внутри результирующего массива не может оказаться null
просто так в качестве значения. Там всегда будет какое-то число начиная от единицы. Более того, даже проверка на наличие значения лишняя. Все что нам нужно – извлекать текущее значение с возможностью задать значение по умолчанию. Сделать это можно воспользовавшись оператором объединения с null. Он позволяет задать значение по умолчанию в случае, когда оно равно null
.
<?php
$value = null;
$value ?? 'wow'; // 'wow'
$value = true;
$value ?? 'wow'; // true
<?php
foreach ($words as $word) {
$result[$word] = ($result[$word] ?? 0) + 1;
}
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.