Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как проверить, ассоциативный массив или список

Короткий ответ

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 — Проверяет, является ли значение массивом.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.