php - 为什么没有 assoc 的 json_decode 在 PHP 5.6 和 PHP 7.2 上的工作方式不同
问题描述
我现在花了几个小时来分析不同服务器上的阵列。
我的小代码:
echo "Current PHP version: " . phpversion() . "\r\n";
$return = '{"status":"ok","message":"","code":"200","data":{"1234":{"sid":1,"name":"foo"},"4321":{"sid":2,"name":"bar"}}}';
$nr = "1234";
$json_data = json_decode($return, true);
$data = $json_data['data'];
if(isset($data[$nr])){
echo "$nr found.\r\n";
}else{
echo "$nr not found.\r\n";
}
$json_data = json_decode($return);
$data = (array) $json_data->data;
if(isset($data[$nr])){
echo "$nr found.\r\n";
}else{
echo "$nr not found.\r\n";
}
产生不同的输出:
当前 PHP 版本:7.2.0 已找到 1234 个。 已找到 1234 个。
当前 PHP 版本:5.6.8 已找到 1234 个。 1234 未找到。
那么为什么是:
$json_data = json_decode($return, true);
$data = $json_data['data'];
不一样
$json_data = json_decode($return);
$data = (array) $json_data->data;
在使用 PHP 5.6 的服务器上
两者都是 $data 一个数组,但在 PHP 5.6 上 isset 不能在数组上正常工作。
解决方案
推荐阅读
- mule - Mule Flow - 将 multipart/form-data 按原样转发到以下 HTTP 请求
- fish - Fish shell 在参数中运行带括号的命令
- ios - 如何在初始化 AVURLAsset 时针对 AVURLAssetHTTPCookiesKey 设置正确的 cookie 值
- java - 在 Android 上,为什么我在尝试加密时出现 javax.crypto.IllegalBlockSizeException?
- python - Dash(Python) - dash-daq 仪表中较厚的环
- c++ - 这是有效的 C++ 代码吗?这不起作用
- sql - SQL 列出列中以 A、B、C - Z 开头的名称的百分比
- c++ - 错误 C2079 'std::pair
,假 >::first' 使用未定义的类 'Dummy ' - javascript - 使用javascript或jquery替换屏幕尺寸小于740px时的图像URL和尺寸
- google-cloud-platform - 如何在 Google Cloud Platform 中创建将在预定义时间启动 Cloud SQL 实例的 cron 作业?