Как проверить, ассоциативный массив или список
Короткий ответ
array_is_list() возвращает true, если ключи идут подряд от нуля:
<?php
var_dump(array_is_list(['a', 'b']));
var_dump(array_is_list(['name' => 'Anna']));Результат:
bool(true)
bool(false)Список с «дырой»
После unset() ключи перестают идти подряд, и массив уже не список:
<?php
$items = ['a', 'b', 'c'];
unset($items[1]);
var_dump(array_is_list($items));
var_dump(array_is_list(array_values($items)));Результат:
bool(false)
bool(true)Зачем это нужно
От этого зависит результат json_encode(): список становится массивом […], а всё остальное — объектом {…}.
<?php
echo json_encode(['a', 'b']), ' ', json_encode([1 => 'a', 2 => 'b']);Результат:
["a","b"] {"1":"a","2":"b"}Функции из этого ответа
- array_is_list — Проверяет, что ключи массива идут по порядку от нуля.
- array_keys — Возвращает все ключи массива.
- is_array — Проверяет, является ли значение массивом.