#arrays #json #cakephp-2.3
#массивы #json #cakephp-2.3
Вопрос:
У меня есть массив, который содержит некоторые строковые значения и некоторые числовые значения. Я использовал
json_encode
преобразовать массив в массив json, но он преобразует числовые значения в строку, которая мне не нужна.
[["India","2"],["Panama","1"]]
Я пытался
JSON_NUMERIC_CHECK
в качестве второго параметра в json_encode он отлично работает на localhost, но выдает ошибку в режиме онлайн.
Use of undefined constant JSON_NUMERIC_CHECK - assumed '
Я использую cakephp 2.3
Комментарии:
1. каким именно вы хотите видеть результат?
[["India",2],["Panama",1]]
было бы недопустимым json2. @andrew Почему это должно быть недопустимым?
3. Какую ошибку вы получаете при использовании json-декодированного массива ‘[[«Индия», «2»], [«Панама», «1»]]’ в cakephp 2.3?
4. @Ryan Vincent я использую Highchart, где я получал ошибку. Мне требуется такой формат массива [[«Индия»,2],[«Панама»,1]]
Ответ №1:
Я предполагаю, что в Интернете у вас более старая версия PHP:
JSON_NUMERIC_CHECK (целое число)
Кодирует числовые строки в виде чисел. Доступно начиная с PHP 5.3.3.
При кодировании в формате JSON в нем не будет кавычек, если PHP знает, что это не строка. Если вам нужно сделать это вручную, вы могли бы сделать что-то вроде этого:
<?php
function json_numeric($array)
{
if (is_array($array) || is_object($array)) {
foreach($array as amp;$prop) {
if (is_numeric($prop)) {
$prop = intval($prop);
}
if (is_object($prop) || is_array($prop)) {
$prop = json_numeric($prop);
}
}
}
return $array;
}
$x = array("a" => 1, "b" => "2", "c"=>array("d"=>1, "e"=>"2"));
echo json_encode(json_numeric($x));
//{"a":1,"b":2,"c":{"d":1,"e":2}}
$y = new stdClass();
$y->a = 1;
$y->b = "2";
echo json_encode(json_numeric($y));
//{"a":1,"b":2}
?>
Комментарии:
1. Спасибо. Эта ошибка была вызвана версией php. Я обновил свою версию php, и теперь она работает нормально.