force json_encode для создания строк

Я должен json_encode массив PHP в массив JavaScript. К сожалению, библиотека jQuery, которую я использую, не будет надлежащим образом обрабатывать этот массив, если она содержит int вместо строк.

В большинстве случаев это приведет к созданию массива, содержащего только строки:

json_encode($data) 

Даже если $ data содержит только цифры, я обычно получаю это

 ["3","7","8"] 

Иногда, хотя, я получаю такие результаты (обратите внимание на ноль):

 ["9691","1792","26","1","4","15",0,"1"] 

или это

 [16171,15470,10390,7585] 

(Заметьте, это, очевидно, разные данные, чтобы проиллюстрировать, что происходит). Мне нужно принудительно использовать json_encode для обработки значений массива в виде строк. Я знаю, что существует противоположный вариант JSON_NUMERIC_CHECK, который применяет числа. Действительно ли эквивалент не существует? Кажется, мой единственный вариант – обработать массив снова на конце JavaScript, что, по возможности, несколько разрушает инкапсуляцию моих объектов.

Related of "force json_encode для создания строк"

Было бы неплохо, если бы была противоположность JSON_NUMERIC_CHECK но это не похоже на то, что есть.

Почему вы не можете гарантировать, что данные имеют правильный тип в вашем php, перед его кодировкой?

Это может означать, что вы должны вручную направить его на строки …

Определите их в своем массиве как строки, или если он идет откуда-то еще:

 $data = json_encode(array_map('strval', $data)); 

json_decode() может преобразовывать большие целые числа в строки, если вы укажете флаг в вызове функции:

 $array = json_decode($json, true, 512, JSON_BIGINT_AS_STRING) 

Поскольку для JSON_NUMERIC_CHECK нет противоположного флага, для этой JSON_NUMERIC_CHECK я создал функцию.
Он принимает одномерные и многомерные массивы и может быть добавлен для условий для проверки каждого элемента массива te.

 function JSON_NUMERIC_STRING($array){ foreach($array as $key => &$value){ if(is_array($value)){ $value = iterateMA($value); }elseif(is_numeric($value)){ $value = strval($value); } // add more conditions if needed... } return $array; } $array = JSON_NUMERIC_STRING($array);