Страницы

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

четверг, 2 января 2020 г.

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

#php


Если я удаляю из массива с целочисленными индексами элемент, а затем применяю к нему
функцию json_encode то получаю строку с JavaScript объектом вместо строки с массивом.

Вот пример кода:

$a = [1, 2, 3];
unset($a[0]);
echo(json_encode($a)); // {"1":2,"2":3}


Как получить на выходе строку с массивом?

В случае с примером выше, вывод должен быть вот таким:

[2,3]

    


Ответы

Ответ 1



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

Ответ 2



Дима, всё доступно объяснил, от себя только добавлю ещё 1 вариант удаления элемента из массива функцией array_splice. Удаляет часть массива и заменяет её чем-нибудь ещё $a = [1, 2, 3]; array_splice($a , 0, 1); echo(json_encode($a));

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

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