我已经尝试过
array_key_exists()
,但是当它返回预期结果时,流明显示错误消息,我需要使用另一个php函数而不是像本问题标题中提到的array_key_exists()
或isset()
那样的property_exists()
.
$jsonData = "mydata.json";
$content = file_get_contents($jsonData);
$unsortedData = json_decode($content, true);
//convert array to object
$object = (object) $unsortedData;
$key = $request->input('key');
$keyData = "false";
if(array_key_exists($key, $object))
{
$keyData = "true";
}
// usort($unsortedData, function($a, $b){
// return $a['no'] > $b['no'];
// });
return $keyData;
// var_dump($unsortedData);
应该使用哪一种以及如何使用?
array_key_exists()
可以与对象一起使用,但该行为在 php 7.4.0 中已弃用并在 php 8 中删除:
注:
出于向后兼容性的原因,array_key_exists() 也将 如果 key 是在给定的对象中定义的属性,则返回 true 大批。从 PHP 7.4.0 开始,此行为已被弃用,并从 PHP 8.0.0.
要检查对象中是否存在属性, property_exists() 应该使用。
因此,您可以将代码更改为:
// Take note that the order of parameters is inverted from the array_key_exists() function
// | |
// V V
if(property_exists($object, $key))
{
$keyData = "true";
}
虽然上述答案解决了某些情况下的问题,但当您拥有受保护/私有属性时却无法解决问题。
我使用 array_key_exists 来检查该属性是否是私有/受保护的,其中最后一个属性将被函数标记为星号并返回 false,因为名称不匹配。
我这样解决了这个问题:
array_key_exists($key, (array)$obj);
所以即使在 php8 中,类型转换对象也应该解决它。 我认为在 php 7 及更早版本中,这是在幕后完成的。在 8 中他们删除了它,也许是性能问题??
很多人推荐 property_exists($object, $key) 但它适用于对象或类属性而不是数组。 如果您检查数组,它将返回错误。
第一个参数必须是对象或现有类的名称