我已经尝试过array_key_exists()
。但当它应该返回预期结果时,lumen显示错误消息,我需要使用另一个php函数,而不是像本题中提到的isset()
或property_exists()
那样使用array_key_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()也将如果键是在给定为的对象中定义的属性,则返回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来检查该属性是否为private/protected,其中最后一个属性将由函数标记为星号并返回false,因为名称不匹配。
我这样解决了这个问题:
array_key_exists($key, (array)$obj);
因此,即使在php8中,类型转换对象也应该解决它。我认为在php7和更早的版本中,这是在后台完成的。在8他们删除了它,也许性能问题??
很多人推荐property_exists($object,$key),但它是针对对象或类属性的,而不是针对数组的。如果您检查数组,它将返回一个错误。
第一个参数必须是对象或现有类的名称