Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
А что не так?
Во втором случае json_encode пытается сохранить ключи массива, тогда как в первом - ключи были очевидны.
----- PostgreSQL DBA
EuGen
Отправлено: 17 Июля, 2012 - 15:12:27
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
DeepVarvar
Все правильно. Ведь в первом случае у Вас есть последовательность ключей по порядку, которая, таким образом, может быть записана просто через запятую в формате json.
Однако если Вы удаляете ключ, как в примере выше, Ваши ключи уже не идет по порядку, и потому запись ["a","c","d"] не будет корректной, ведь она будет соответствовать (имею ввиду, если бы речь шла о представлении ассоциативного PHP-массива в json) в json ["0":a, "1":"c", "2":"d"] - что некорректно - ведь ключа "1" уже не существует, и, кроме того, остальные ключи тоже оказались бы перенумерованными.
Иными словами - запись через запятую может быть применена только когда она корректно интерпретирует массив в соответствии с тем, что есть в собственно PHP-записи (то есть индексы идут по порядку в обоих представлениях)
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
DeepVarvar
Отправлено: 17 Июля, 2012 - 15:12:37
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Мелкий пишет:
А что не так?
Преобразование ключей массива в имена свойств. (Добавление)
EuGen пишет:
ведь она будет соответствовать в json ["0":a, "1":"c", "2":"d"]
если бы хотябы так, но он еще и в объект переделывает.
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
DeepVarvar
В "объект" он переделывает, так как ассоциативных массивов в json не существует. То, что в ассоциативном массиве php есть ключ, интерпретируется в json как свойство объекта. Здесь тоже все логично. PHP не может интерпретировать в json последовательность ключей 0,2,3 иначе как в виде свойств объекта json. Повторюсь, перечисление a,c,d было бы некорректно.
(Скобки "[..]"я, вероятно, по случайности некорректно написал в предыдущем комментарии - имел ввиду объект "{..}")
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
DeepVarvar
Отправлено: 17 Июля, 2012 - 15:22:28
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
DeepVarvar пишет:
$a = array("a","c","d");
Вы к чему? Записав таким образом, Вы получите массив с ключами 0,1,2. И в json он будет приведен к массиву. Не очень понимаю связь с рассматриваемым вопросом.
Вот если Вы запишете
- то, наверное, поймете, про что я сейчас речь вел. Приведение типов здесь не играет роли - дело лишь в том, возможно или нет представление конкретного массива PHP в виде массива или только объекта json.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Мелкий
Отправлено: 17 Июля, 2012 - 15:30:19
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
DeepVarvar пишет:
т.к. даже числовые ключи в php являются ассоциативными.
В PHP-то числовые ключи являются числами. А вот как в JSON записать числовые ключи, кроме как объектом?
DeepVarvar пишет:
$a = array("a","c","d");
Другие ключи значений.
----- PostgreSQL DBA
Stierus
Отправлено: 17 Июля, 2012 - 15:33:24
Рекордсмен по количеству сообщений за 7 дней
Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Stierus пишет:
все логично, не?
Это смотря с какой стороны смотреть
Не логично:
У вас была корзина с четырьмя яблоками.
У вас забрали из корзины яблоко номер два.
Почему теперь яблоки в кастрюле? Куда делась корзина?
Логично:
Мы удалили второй элемент массива. Теперь все ключи (только в контексте js!) стали вдруг свойствами, а вот в php остались массивом, что и показывает var_dump.
А ну ка пример не на пыхе:
Идея, думаю, понятна. И потом, Ваш пример с javascript - все же имеет несколько иной смысл: ведь json_encode интерпретирует PHP-массив в формате json. Понять, что разница есть, несложно. Например:
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.