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
相关产品推荐
相关产品推荐

