Страницы

Поиск по вопросам

среда, 9 января 2019 г.

json_encode возвращает объект вместо массива

Если я удаляю из массива с целочисленными индексами элемент, а затем применяю к нему функцию json_encode то получаю строку с JavaScript объектом вместо строки с массивом.
Вот пример кода:
$a = [1, 2, 3]; unset($a[0]); echo(json_encode($a)); // {"1":2,"2":3}
Как получить на выходе строку с массивом?
В случае с примером выше, вывод должен быть вот таким:
[2,3]


Ответ

Почему это происходит:
При удалении элемента (не являющегося последним) в ключах массива появляется "дырка". При этом, функция json_encode обрабатывает такой массив не как массив с целочисленными ключами, а как ассоциативный массив (которому ставится в соответствие объект JavaScript).
Что делать:
Для того, чтобы получить на выходе массив, нужно нормализовать его ключи, например с помощью функции array_values
$a = [1, 2, 3]; unset($a[0]); $a = array_values($a); echo(json_encode($a)); // [2,3]

Комментариев нет:

Отправить комментарий