You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP7.4中array_key_exists被弃用 如何用isset或property_exists替代

选型建议

你当前场景是对(object)强制转换生成的stdClass对象做属性存在性判断,两个替代方案的差异和选型逻辑如下:

  • isset($object->$key):仅当属性存在**且属性值不为null**时返回true,如果你的JSON数据里可能存在值为null的键,会出现误判
  • property_exists($object, $key):只要属性在对象上存在,无论值是否为null都返回true,和你原代码使用array_key_exists()的逻辑完全一致,更适配你的需求

具体实现

方案1:保留对象转换逻辑,直接替换判断函数

你只需要修改if判断行的函数即可,其余代码不需要改动:

$jsonData = "mydata.json";
$content = file_get_contents($jsonData);
$unsortedData = json_decode($content, true);

// 将数组转换为对象
$object = (object) $unsortedData;

$key = $request->input('key');
$keyData = "false";
// 替换array_key_exists为property_exists
if(property_exists($object, $key))
{
    $keyData = "true";
}

// usort($unsortedData,  function($a, $b){
//     return $a['no'] > $b['no'];
// });
return $keyData;
// var_dump($unsortedData);

方案2:直接使用原数组做判断(更推荐)

如果你转对象操作仅为了做存在性判断,完全可以省略该步骤,直接对解码后的数组使用array_key_exists()即可。PHP 7.4+仅弃用了array_key_exists()对对象的支持,对数组的支持完全正常:

$jsonData = "mydata.json";
$content = file_get_contents($jsonData);
$unsortedData = json_decode($content, true);

$key = $request->input('key');
$keyData = "false";
// 直接对数组使用array_key_exists,无兼容问题
if(array_key_exists($key, $unsortedData))
{
    $keyData = "true";
}

// usort($unsortedData,  function($a, $b){
//     return $a['no'] > $b['no'];
// });
return $keyData;
// var_dump($unsortedData);

内容的提问来源于stack exchange,提问作者dhanyn10

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 05:45:08