流明 array_key_exists() 贬值,那么如何使用 isset() 或 property_exists() 之类的替代方法来排列?
lumen array_key_exists() depreciated, then how to use the alternative like isset() or property_exists() to array?
我已经尝试过 array_key_exists()
。但是当它应该 return 预期的结果时,流明显示错误消息,我需要使用另一个 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 中删除:
Note:
For backward compatibility reasons, array_key_exists() will also
return true if key is a property defined within an object given as
array. This behaviour is deprecated as of PHP 7.4.0, and removed as of
PHP 8.0.0.
To check whether a property exists in an object,
property_exists()
should be used.
因此,您可以将代码更改为:
// Take note that the order of parameters is inverted from the array_key_exists() function
// | |
// V V
if(property_exists($object, $key))
{
$keyData = "true";
}
虽然上述答案解决了某些情况下的问题,但当您拥有 protected/private 属性时却没有。
我用 array_key_exists 检查 属性 是否为 private/protected,其中最后一个将被函数标记为星号,而 return 为假,因为名字不匹配。
我是这样解决的:
array_key_exists($key, (array)$obj);
因此,即使在 php8 中,对象的类型转换也应该解决它。
我认为在 php 7 和更早的版本中,这是在幕后完成的。在 8 他们删除了它,可能是性能问题??
很多人推荐 property_exists($object, $key) 但它适用于对象或 class 属性而不适用于数组。
如果您检查数组,它将 return 出错。
第一个参数必须是对象或现有对象的名称 class
我已经尝试过 array_key_exists()
。但是当它应该 return 预期的结果时,流明显示错误消息,我需要使用另一个 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 中删除:
Note:
For backward compatibility reasons, array_key_exists() will also return true if key is a property defined within an object given as array. This behaviour is deprecated as of PHP 7.4.0, and removed as of PHP 8.0.0.
To check whether a property exists in an object, property_exists() should be used.
因此,您可以将代码更改为:
// Take note that the order of parameters is inverted from the array_key_exists() function
// | |
// V V
if(property_exists($object, $key))
{
$keyData = "true";
}
虽然上述答案解决了某些情况下的问题,但当您拥有 protected/private 属性时却没有。
我用 array_key_exists 检查 属性 是否为 private/protected,其中最后一个将被函数标记为星号,而 return 为假,因为名字不匹配。
我是这样解决的:
array_key_exists($key, (array)$obj);
因此,即使在 php8 中,对象的类型转换也应该解决它。 我认为在 php 7 和更早的版本中,这是在幕后完成的。在 8 他们删除了它,可能是性能问题??
很多人推荐 property_exists($object, $key) 但它适用于对象或 class 属性而不适用于数组。 如果您检查数组,它将 return 出错。
第一个参数必须是对象或现有对象的名称 class