У меня есть 2 сервера, каждый из которых работает с одним и тем же приложением, и у меня есть функция, возвращающая ответ json.
При использовании print_r($object)
я получаю это на обоих серверах:
Array
(
[stats] => Array
(
[6871] => 200
)
[answers] => Array
(
[0] => 7171
)
)
Когда я использую json_encode($object);
Я получаю это:
Для сервера A:
{"stats":{"6871":200},"answers":["7171"]}
Для сервера B:
{"stats":{"6871":200},"answers":[7171]}
Таким образом, один сервер кодирует целочисленное значение answers
в виде строки.
Серверы работают:
Оба файла nginx.conf идентичны. Я не могу понять, где проблема, и я сижу на это часами, у кого-нибудь есть мысли?
Функция print_r()
не точно отражает типы данных:
<?php
$string_values = array(
'stats' => array (
6871 => '200'
),
);
$numeric_values = array(
'stats' => array (
6871 => 200,
),
);
print_r($string_values);
print_r($numeric_values);
... будет печатать тот же результат дважды:
Array
(
[stats] => Array
(
[6871] => 200
)
)
Array
(
[stats] => Array
(
[6871] => 200
)
)
Лучше переключитесь на var_dump()
:
var_dump($string_values, $numeric_values);
array(1) {
["stats"]=>
array(1) {
[6871]=>
string(3) "200"
}
}
array(1) {
["stats"]=>
array(1) {
[6871]=>
int(200)
}
}
var_dump
чтобы более четко показать типы на входе.print_r
любит скрывать эту информацию от вас. Возможно, ваш вклад отличается на двух машинах.