Ответ 1
Многие программисты предпочитают использовать true
как второй аргумент json_decode, поскольку возвращаемый массив-помощник будет очень похож на то, как вы обрабатываете объекты в javascript.
Возврат надлежащего объекта потребует чтения о том, как это используется, а что нет, и поскольку большинство программистов хорошо знакомы с ассоциативными массивами, которые более предпочтительны, особенно если код будет поддерживаться командой разработчиков. Код должен быть легко понятным.
Что касается вопросов о производительности, я не думаю, что вам нужно будет беспокоиться об этом, поскольку бутылка шеи в большинстве (всех) случаях будет в другом месте. Если вы не разбираете массивную строку, и я имею в виду действительно огромную, вам не нужно делать никаких тестов. Я полагаю, что разница между возвратом массива-ассоциатора и соответствующим объектом будет незначительной.
Тест производительности (синтаксический анализ)
Я нашел довольно большую строку json здесь и внес некоторые корректировки, чтобы сделать его еще большим, конечный размер - 84 578 байт.
Затем я проанализировал строку, используя обе альтернативы (ассоциативный массив против объекта) по 1 000 раз каждый, и я провел тест три раза. Результаты приведены ниже:
1-й прогон
JSON object exec: 4.06122 s
JSON assoc exec: 3.28679 s
-------------------------------------
assoc is faster by 19.07%
2-й прогон
JSON object exec: 4.09614 s
JSON assoc exec: 3.29216 s
-------------------------------------
assoc is faster by 19.63%
Третий прогон
JSON object exec: 4.08762 s
JSON assoc exec: 3.29960 s
-------------------------------------
assoc is faster by 19.28%
Тест производительности (чтение/запись)
Этот тест должен показать, какой из stdObject
и Array()
работает быстрее, я использую модифицированный json файл (более крупный), чем в предыдущем тесте.
Каждый тест чтения/записи выполнялся 100 000 раз (т.е. код, приведенный ниже, выполнялся много раз).
json_decode ($ json_data)
for ($i =0; $i < 24; ++$i){
$a = $object[$i]->user->profile_sidebar_border_color . "stackoverflow";
$object[$i]->nested->entities->user_mentions[0]->indices[$i&1] += 1;
}
json_decode ($ json_data, true)
for ($i =0; $i < 24; ++$i){
$a = $assoc[$i]['user']['profile_sidebar_border_color'] . "stackoverflow";
$assoc[$i]['nested']['entities']['user_mentions'][0]['indices'][$i&1] += 1;
}
1-й прогон
JSON object read/write: 3.05421 s
JSON assoc read/write: 2.51932 s
-------------------------------------
assoc is faster by 17.51%
2-й прогон
JSON object read/write: 3.06307 s
JSON assoc read/write: 2.52701 s
-------------------------------------
assoc is faster by 17.50%
Третий прогон
JSON object read/write: 3.06109 s
JSON assoc read/write: 2.52248 s
-------------------------------------
assoc is faster by 17.60%
версия PHP
PHP 5.3.6 (cli) (построено: 13 авг 2011 19:04:57) Copyright (c) 1997-2011
PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend
Технологии