Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
PHP json_encode, почему иногда возвращается объект, а иногда массив?
|
|||
|---|---|---|---|
|
#18+
Получаю с сервера адресный справочник, состоящий из полей (столбцов) "Город", "Улица" и "Дом". Из него создаю массив-кеш, который затем забирает клиентский js-скрипт. Код такой: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. Но вот JSON получается странный: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Соответственно в клиентском коде у некоторых улиц (Улица1) номера домов являются array, а у некоторых улиц (Улица2) номера домов являются object. Отчего так? ________________________ Мы смотрим с оптимизмом... ...в оптический прицел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2015, 22:47 |
|
||
|
PHP json_encode, почему иногда возвращается объект, а иногда массив?
|
|||
|---|---|---|---|
|
#18+
Alibek B., Посмотри в дебаггер с оптимизмом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2015, 23:27 |
|
||
|
PHP json_encode, почему иногда возвращается объект, а иногда массив?
|
|||
|---|---|---|---|
|
#18+
Alibek B., на вход даешь кашу, он тебе на выходе её же и возвращает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2015, 05:27 |
|
||
|
PHP json_encode, почему иногда возвращается объект, а иногда массив?
|
|||
|---|---|---|---|
|
#18+
А намек можно дать, где каша? У меня массив с тройной вложенностью, первые два уровня ассоциативные, третий обычный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2015, 07:57 |
|
||
|
PHP json_encode, почему иногда возвращается объект, а иногда массив?
|
|||
|---|---|---|---|
|
#18+
Alibek B., ну посмотри в дебагере чем они отличаются. эти входные третьего уровня. мы тебе как поможем? если мы не знаем что точно у тебя на входе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2015, 08:14 |
|
||
|
PHP json_encode, почему иногда возвращается объект, а иногда массив?
|
|||
|---|---|---|---|
|
#18+
Alibek B., Ваще-то в мануале достаточно подробно было когда объект а когда массив. Там вроде как даже параметр для управления есть ... не, не канает? ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2015, 08:19 |
|
||
|
PHP json_encode, почему иногда возвращается объект, а иногда массив?
|
|||
|---|---|---|---|
|
#18+
Arhat109, ну не читает он мануал) а если бы читал, увидел бы там что: Ассоциативный массив всегда отображается как объект ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2015, 08:28 |
|
||
|
PHP json_encode, почему иногда возвращается объект, а иногда массив?
|
|||
|---|---|---|---|
|
#18+
r uа если бы читал, увидел бы там что: Ассоциативный массив всегда отображается как объект У меня код: Код: php 1. Откуда при таком коде на третьем уровне вложения может взяться ассоциативный массив? К тому же из JSON видно, что у проблемных записей ключи вполне себе числовые, только почему-то json_encode посчитал их свойствами объекта. Как будто natsort превращает обычный массив в ассоциативный. Кстати, если в моем коде после natsort выполнить такую строчку: Код: php 1. то проблема решается. Но непонятно, откуда после natsort в отсортированном массиве берутся ключи, в мануале про это не сказано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2015, 09:06 |
|
||
|
PHP json_encode, почему иногда возвращается объект, а иногда массив?
|
|||
|---|---|---|---|
|
#18+
Arhat109Там вроде как даже параметр для управления есть ... не, не канает? ;) Нет, там есть параметр всегда представлять данные, как объект (даже для пустых массивов). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2015, 09:08 |
|
||
|
PHP json_encode, почему иногда возвращается объект, а иногда массив?
|
|||
|---|---|---|---|
|
#18+
Alibek B., 1. ты знаешь чем отличаются ассоциативные массивы от обычных? если нет - дальше не читай, все равно непоймешь как найти ответ на свой вопрос. 2. раз в итоге у тебя получается такая фигня, значит туда попадает ассоциативный массив или объект. это факт. прими его и начни искать место где это происходит. 3. или ты хочешь сказать что у миллиона программисто по всему миру json_encode() работает корректно, а у тебя одного некорректно? если только ты сам её написал) 4. откуда и что там у тебя берется - тебе никто тут не ответит, ибо ты так и не удосужился предоставить нам пример входных данных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2015, 09:12 |
|
||
|
PHP json_encode, почему иногда возвращается объект, а иногда массив?
|
|||
|---|---|---|---|
|
#18+
Alibek B.Нет, там есть параметр всегда представлять данные, как объект (даже для пустых массивов).а обратного ключа не может быть впринципе. ибо таков формат json. ну нельзя представить в нем ассоциативные массивы или объекты в виде простого массива, без потери части информации. неужели непонятно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2015, 09:13 |
|
||
|
PHP json_encode, почему иногда возвращается объект, а иногда массив?
|
|||
|---|---|---|---|
|
#18+
Кажется нашел причину. r u1. ты знаешь чем отличаются ассоциативные массивы от обычных? если нет - дальше не читай, все равно непоймешь как найти ответ на свой вопрос. В PHP? Ничем. Там все массивы ассоциативные. Когда я добавляю элементы в массив на третьем уровне, он добавляется с автоматически нарастающим ключом (индексом). То есть получается [0=>'12', 1=>'16', ...]. natsort, судя по всему, сортирует по значениям, но сохраняет ключи (индексы). Если элементы шли по возрастанию, то массив не изменяется, а если элементы переставлялись, то и индексы переставлялись вместе с элеменетами. В результате, например для моего первого примера в "Улица3", из ['24', '26', '18', '3'] (вернее [0=>'24', 1=>'26', 2=>'18', 3=>'3']) получилось ['3'=>'3', '2'=>18', '0'=>24', '1'=>'26']. Ну и поскольку в PHP нет обычных массивов, то json_encode видимо ориентируется на значения ключей — если они исключительно числовые, начинаются с 0 и идут по возрастанию и без дырок, то массив обычный, в остальных случаях ассоциативный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2015, 09:22 |
|
||
|
PHP json_encode, почему иногда возвращается объект, а иногда массив?
|
|||
|---|---|---|---|
|
#18+
Alibek B.Но непонятно, откуда после natsort в отсортированном массиве берутся ключи, в мануале про это не сказано. подсказка: а не в ключах массива ли дело?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2015, 09:24 |
|
||
|
PHP json_encode, почему иногда возвращается объект, а иногда массив?
|
|||
|---|---|---|---|
|
#18+
Alibek B.Когда я добавляю элементы в массив на третьем уровне, он добавляется с автоматически нарастающим ключом (индексом). То есть получается [0=>'12', 1=>'16', ...]. natsort, судя по всему, сортирует по значениям, но сохраняет ключи (индексы). Если элементы шли по возрастанию, то массив не изменяется, а если элементы переставлялись, то и индексы переставлялись вместе с элеменетами. В результате, например для моего первого примера в "Улица3", из ['24', '26', '18', '3'] (вернее [0=>'24', 1=>'26', 2=>'18', 3=>'3']) получилось ['3'=>'3', '2'=>18', '0'=>24', '1'=>'26']. Ну и поскольку в PHP нет обычных массивов, то json_encode видимо ориентируется на значения ключей — если они исключительно числовые, начинаются с 0 и идут по возрастанию и без дырок, то массив обычный, в остальных случаях ассоциативный. тебе еще в самом начале сказали, отдебаж и посмотри в чем разница этих массивов. даже в приведенном тобой коде видно, что ключи там неиндексированные. а раз так, то как еще можно сохранить информацию об этом в формате json? если представить их как обычный массив, то инф. о ключах то потеряется. а вдруг тебе это важно? потому так и кодируется, чтоб потом можно было восстановить "один в один". видишь разобрался. стоило тему заводить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2015, 09:31 |
|
||
|
PHP json_encode, почему иногда возвращается объект, а иногда массив?
|
|||
|---|---|---|---|
|
#18+
Alibek B., ещё вопрос - а не из базы ли получаются исходные данные? смысл тогда во всех этих сортировках, если можно из базы взять отсортированные как нужно данные? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2015, 09:41 |
|
||
|
PHP json_encode, почему иногда возвращается объект, а иногда массив?
|
|||
|---|---|---|---|
|
#18+
Alibek B.В PHP? Ничем. Там все массивы ассоциативные. причем здесь php. вообще-то Простые и Ассоциативные массивы это понятия вне конкретного ЯП. неважно как они устроены внутри. я могу на пхп работать с массивом как простым, а не ассоциативным. еще есть SplFixedArray, к сведению... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2015, 09:44 |
|
||
|
PHP json_encode, почему иногда возвращается объект, а иногда массив?
|
|||
|---|---|---|---|
|
#18+
-k2-смысл тогда во всех этих сортировках, если можно из базы взять отсортированные как нужно данные? Натуральную сортировку БД делать не умеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2015, 10:16 |
|
||
|
PHP json_encode, почему иногда возвращается объект, а иногда массив?
|
|||
|---|---|---|---|
|
#18+
r uесли представить их как обычный массив, то инф. о ключах то потеряется. а вдруг тебе это важно? потому так и кодируется, чтоб потом можно было восстановить "один в один". Подобные вещи следует документировать. В документации к uksort и uasort ясно сказано, что они сохраняют связь между ключами и значениями. В документации к sort есть предупреждение, что sort не сохраняет связь между ключами и значениями (в отличии от asort). В документации к natsort никаких особых замечаний нет, но я ожидал, что ее поведение будет схоже с sort, т.е. отсортированный массив будет переиндексирован. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2015, 10:20 |
|
||
|
PHP json_encode, почему иногда возвращается объект, а иногда массив?
|
|||
|---|---|---|---|
|
#18+
Alibek B., а можно пример данных? а то я просто базист в прошлом, и как то привыкла манипуляции с исходными данными по максимуму там делать, ибо для этого они и придуманы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2015, 10:22 |
|
||
|
PHP json_encode, почему иногда возвращается объект, а иногда массив?
|
|||
|---|---|---|---|
|
#18+
Например вот: CITYSTREETADDRESSГородУлица139ГородУлица141ГородУлица22ГородУлица24ГородУлица247ГородУлица26ГородУлица28ГородУлица318ГородУлица324ГородУлица326ГородУлица33ГородУлица33/2ГородУлица36ГородУлица36АГородУлица37ГородУлица37АГородУлица4ПочтаГородУлица443БГородУлица4101ГородУлица4112ГородУлица4160АГородУлица4162ГородУлица4162АГородУлица4162БГородУлица5309ГородУлица5309АГородУлица5311ГородУлица5311АГородУлица5316ГородУлица5317А/1ГородУлица5317А/2ГородУлица5317А/3ГородУлица532ГородУлица5330ГородУлица5334ГородУлица5336ГородУлица5336АГородУлица5338ГородУлица534ГородУлица5346 В БД можно поэкспериментировать с регулярными выражениями для сортировки, но всех вариантов не предусмотреть. Поэтому в данном случае нужную (натуральную) сортировку лучше делать на клиенте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2015, 10:30 |
|
||
|
PHP json_encode, почему иногда возвращается объект, а иногда массив?
|
|||
|---|---|---|---|
|
#18+
Alibek B.В документации к natsort никаких особых замечаний нет, но я ожидал, что ее поведение будет схоже с sort, т.е. отсортированный массив будет переиндексирован. даже если бы это было описано в мануале, ты бы все равно не обратил на это внимания. ты сам привел дамп своих выходных данных, где видно что ключи неупорядочены. тебе говорили - обрати внимание - чем они отличаются. но ты уперся как .... и продолжал спорить что с данными все ОК, а проблема где-то в json_encode() ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2015, 10:38 |
|
||
|
PHP json_encode, почему иногда возвращается объект, а иногда массив?
|
|||
|---|---|---|---|
|
#18+
Alibek B.Поэтому в данном случае нужную (натуральную) сортировку лучше делать на клиенте. варианты реализации натуральной сортировки в mysql гуглится за минуту ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2015, 10:48 |
|
||
|
PHP json_encode, почему иногда возвращается объект, а иногда массив?
|
|||
|---|---|---|---|
|
#18+
r uArhat109, ну не читает он мануал) Похоже на то. Вот ссыль, там можно переключать на русский и много каких языков по выбору: http://ru2.php.net ... далее "в путь". Открыто должно быть как только сел кодить. Читать про каждую используемую функцию ПЕРЕД использованием. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2015, 11:03 |
|
||
|
PHP json_encode, почему иногда возвращается объект, а иногда массив?
|
|||
|---|---|---|---|
|
#18+
Alibek B., надеюсь у вас не слишком много адресов, не представляю как в таких условиях выдать результат постранично: прийдется взять из базы все, отсортировать три раза, разбить постраничку, возможно закешировать и в итоге выдать одну страницу я бы переложила сортировки все-таки на бд в крайнем случае, предусмотреть предварительные процедуры очистки и подготовки данных при зарузке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2015, 11:12 |
|
||
|
|

start [/forum/topic.php?fid=23&msg=38910720&tid=1461904]: |
0ms |
get settings: |
8ms |
get forum list: |
21ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
83ms |
get tp. blocked users: |
2ms |
| others: | 223ms |
| total: | 412ms |

| 0 / 0 |
