Многие программисты предпочитают использовать true
в качестве второго аргумента json_decode , поскольку возвращенный ассоциативный массив будет очень похож на то, как вы обрабатываете объекты в javascript.
Возврат правильного объекта потребует чтения о том, как он используется, а что нет, и, поскольку большинство программистов хорошо знакомы с ассоциативными массивами, это более предпочтительно, особенно если код будет поддерживаться командой разработчиков. Код должен быть легко понятен.
Что касается вопросов о производительности, я не думаю, что вам нужно беспокоиться об этом, поскольку горлышко бутылки в большинстве (всех) случаев будет в другом месте. Если вы не анализируете массивную строку, и я имею в виду действительно огромную строку, вам не нужно делать какие-либо тесты. Я полагаю, что разница между возвратом массива сопоставления и надлежащего объекта будет незначительной.
Тест производительности (разбор)
Я нашел довольно большую строку json здесь и внес некоторые изменения, чтобы сделать ее еще больше, окончательный размер составляет 84 578 байт.
Затем я проанализировал строку, используя обе альтернативы (ассоциативный массив против объекта), по 1000 раз каждый, и я провел тест три раза. Результаты приведены ниже:
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%
3-й пробег
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%
3-й пробег
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
Технологии