Я должен 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, что, по возможности, несколько разрушает инкапсуляцию моих объектов.
Было бы неплохо, если бы была противоположность 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);