PHP json_encode медленный для больших массивов - PullRequest
0 голосов
/ 11 июня 2018

У меня есть некоторые проблемы, связанные с json_encode: мне нужно использовать большой массив (несколько элементов по 100 тыс.), Каждый с очень простой структурой (один ключ, одно строковое значение).json_decode работает нормально, но как только я захочу json_encode, он будет очень медленным.Поскольку я полностью контролирую данные здесь, я попытался написать супер простой кодер JSON, и это быстро.Я весьма удивлен, поскольку моя функция кодирования грубая, и у меня нет какой-либо из внутренних оптимизаций php, которые совершенно точно присутствуют в json_encode.

Есть идеи, в чем может быть проблема?

Я поставил свою функцию кодера ниже для справки.

Спасибо

protected function simpleJsonEncoder($data) {
    if (is_array($data)) {
        $is_indexed = (array_values($data) === $data);
        $tab_str = [];
        if ($is_indexed) {
            foreach($data as $item) {
                $str_item = $this->simpleJsonEncoder($item);
                $tab_str[] = $str_item;
            }
            $result = '[' . implode(',', $tab_str) . ']';
        }
        else {
            foreach($data as $index => $item) {
                $str_item = $this->simpleJsonEncoder($item);
                $tab_str[] = '"' . htmlspecialchars($index, ENT_QUOTES) . '":' . $str_item;
            }
            $result = '{' . implode(',', $tab_str) . '}';
        }
    }
    else {
        $result = '"' . htmlspecialchars($data, ENT_QUOTES) . '"';
    }

    return $result;
}
...