首页 > 解决方案 > 为什么没有 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 不能在数组上正常工作。

标签: phpjsonisset

解决方案


推荐阅读