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

276
01 марта 2017, 22:33

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

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

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

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

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

[2,3]
Answer 1

Почему это происходит:

При удалении элемента (не являющегося последним) в ключах массива появляется "дырка". При этом, функция json_encode обрабатывает такой массив не как массив с целочисленными ключами, а как ассоциативный массив (которому ставится в соответствие объект JavaScript).

Что делать:

Для того, чтобы получить на выходе массив, нужно нормализовать его ключи, например с помощью функции array_values:

$a = [1, 2, 3];
unset($a[0]);
$a = array_values($a);
echo(json_encode($a)); // [2,3]
Answer 2

Дима, всё доступно объяснил, от себя только добавлю ещё 1 вариант удаления элемента из массива функцией array_splice.

Удаляет часть массива и заменяет её чем-нибудь ещё

$a = [1, 2, 3];
array_splice($a , 0, 1);
echo(json_encode($a));
READ ALSO
Не приходят ообщения из формы обратной связи

Не приходят ообщения из формы обратной связи

PHP не знаю, к сожалениюПытаюсь прикрутить к сайту готовую форму, код которой нашла в сети

265
перечислить все дни с текущей даты

перечислить все дни с текущей даты

нужно вывести все даты начиная с текущей, и не больше 30 дней

186
PHP, HTML from <textarea> Принять значение

PHP, HTML from <textarea> Принять значение

Добрый деньУ меня есть такая часть кода:

176