Что быстрее json_decode или explode?

116
07 декабря 2019, 03:30

Что быстрее json_decode или explode? Информация хранится в виде 1,2,3 есть возможность изменить на [1,2,3]
В дальнейшем требуется из этих данных получить массив.
У меня есть два решения

1)Хранить данные 1,2,3 и выводить:

$test = '1,2,3';
$test = explode(',', $test);
print_r($test);

Результат:

Array ( [0] => 1 [1] => 2 [2] => 3 ) 

2)Хранить данные в виде [1,2,3] и выводить:

$test = '[1,2,3]';
$test = json_decode($test);
print_r($test);

Результат:

Array ( [0] => 1 [1] => 2 [2] => 3 ) 

Какой из способов более щадящий, либо есть другой?

Answer 1

Обе одинаково быстрые. Не нужно занимать себя такими бессмысленными вопросами.

Функции не бывают медленными. Медленной бывает архитектура.

  • Если объем данных в этих массивах будет небольшим, то не будет никакой разницы, любая функция будет работать быстро.
  • Ecли объем данных будет большим, то не будет никакой разницы, любая функция будет работать медленно.

Отсюда вывод - если нас интересует производительность, мы должны следить за объемом данных, а не за тем, какая функция будет их обрабатывать.

Сама идея хранить массивы данных через запятую выглядит костылем, и скорее всего приведет к проблемам в будущем. Не со скоростью, а с написанием кода для их обработки.

Answer 2

json_decode на порядки более сложная и тяжелая функция, чем explode.

В explode производится всего один проход по строке с наполнением хэш-таблицы. В json_decode происходит синтаксический разбор средствами библиотеки bison с созданием большого количества промежуточных значений.

Но! Как верно отметил Ипатьев, если у вас не высоконагруженная система, то использовать одно вместо другого - это экономия на микро(если не нано)-секундах. С точки зрения организации данных json более предпочтителен.

READ ALSO
Как убрать порт 433 из url?

Как убрать порт 433 из url?

Метод, формирующий тег canonical, возвращает:

175
NaN в ajax post

NaN в ajax post

Подскажите пожалуйста в консоли выводит слово "Принят" а в mysql записывает NaNВ чем может быть проблема?

121
где происходит подключение файла template_style.css в битрикс?

где происходит подключение файла template_style.css в битрикс?

в кастомном шаблоне битрикс, в его папке есть файл template_stylescss

95
Парсинг строк в php

Парсинг строк в php

Вот тут я получил массив ($arr[0]), что равно !ban 40166252,

120