PHP 2551 ~ 1 мин.

PHP 8.1: функция array_is_list

PHP 8.1: функция array_is_list

При работе с массивами может наступить момент, когда вам понадобится проверить, является ли рассматриваемый массив списком

Итак, когда массив квалифицируется как «список» (list)?

Массив можно назвать списком, если ключи (должны быть в форме целого числа) являются последовательными. Это означает, что если массив является ассоциативным массивом с целочисленными ключами, он не должен иметь отсутствующих смещений массива или содержать неупорядоченные ключи.

Например, возьмем для примера следующее:


$bikes = [
    0 => 'Honda',
    1 => 'Kawasaki',
    2 => 'Yamaha'
];

 Здесь мы можем вызвать массив $bikes как список, поскольку целочисленные ключи здесь находятся в правильном порядке. Но если взять:


$bikes = [
    2 => 'Honda',
    0 => 'Kawasaki',
    1 => 'Yamaha'
];

В этом случае массив $bikes не является списком, так как ключи теперь не идут по порядку.

Теперь, чтобы проверить, является ли массив списком, мы можем написать нашу собственную реализацию вот так:


function is_list(array $array): bool 
{
    $expectedKey = 0;
    foreach ($array as $i => $_) {
        if ($i !== $expectedKey) { return false; }
        $expectedKey++;
    }
    return true;
}

$bikes = [
    2 => 'Honda',
    0 => 'Kawasaki',
    1 => 'Yamaha'
];

var_dump(is_list($bikes)); // false

Или, если вы планируете перейти на PHP 8.1, для этого есть функция, которую вы можете использовать прямо из коробки.

Функция array_is_list()

В этом PR для PHP 8.1 будет представлена ​​функция array_is_list(), которую можно использовать для той же цели, о которой я говорил выше.

Итак, если мы хотим переписать наш предыдущий пример с помощью этой функции, мы можем сделать это так:


$bikes = [
    0 => 'Honda',
    1 => 'Kawasaki',
    2 => 'Yamaha'
];

var_dump(array_is_list($bikes)); // true

Вот и все! Это все, что делает эта функция.

Здесь следует отметить, что эта функция не будет правильно работать с массивами, у которых ключи, отличные от целых чисел, по очевидным причинам.

Кроме того, все, что передается в качестве аргумента в array_is_list(), не являющимся массивом, вызовет ошибку типа:


array_is_list(new stdClass());  // исключение TypeError
array_is_list(null);  // исключение TypeError

Что интересно, первоначально было предложено назвать функцию is_list(), но далее переименовано, из-за возможности конфликта имен с потенциальным типом списка. 

Что думаешь?

Категории
  • PHP 67
  • Заметки 18
  • Безопасность 4
  • Флуд 2
  • Nginx 2
  • ИТ новости 2
  • Видео 1
  • Docker 1
  • Roadmap 1
  • Архитектура 0

Хочешь поддержать сайт?

Делаем из мухи слона

sergeymukhin.com

персональный блог о веб-разработке от Сергея Мухина. Блог был основан в 2018 году, и собирался уделять основное внимание последним тенденциям, учебным пособиям, а также советам и рекомендациям, позволяющим начинающим девелоперам встать быстрее на правильную дорогу веб разработки, но что-то пошло не так 😃

Релизы PHP 8.4

Дата Релиз
4 Июля 2024 Альфа 1
18 Июля 2024 Альфа 2
1 Августа 2024 Альфа 3
13 Августа 2024 Feature freeze
15 Августа 2024 Бета 1
29 Августа 2024 Бета 2
12 Сентября 2024 Бета 3
26 Сентября 2024 RC 1
10 Октября 2024 RC 2
24 Октября 2024 RC 3
7 Ноября 2024 RC 4
21 Ноября 2024 GA

Что нового?