PHP获取数组的值的函数 getValue 避免Notice
在写代码过程中,经常会遇到取了一个数组的不存在的下标的值的情况,例如下列代码:
$array = [
'foo' => [
'bar' => new User(),
]
];
$value = $array['a'];
会产生如下的Notice:
Notice: Undefined index: a in xxx on line 6
为了避免这种情况我们可能会这样写:
$value = isset($array['foo']['bar']->name) ? $array['foo']['bar']->name : '';
Yii 2.0 框架有个数组助手类(ArrayHelper),通过这个类的getValue函数可以非常方便的获取数组的值:
$value = ArrayHelper::getValue($array, 'foo.bar.name', '');
我将这个取数组值的函数取出来了:
<?php
/**
* 获取数组的值
*
* @param array|object $array 从中提取值的数组或对象
* @param string|array $key 数组元素的键名,对象的键数组或属性名,或者返回值的匿名函数。匿名函数签名应为:`function($array, $defaultValue)`.
* @param mixed $default 如果指定的数组的键不存在,则返回默认值。从对象获取值时不使用。
* @return mixed 元素的值(如果找到),否则为默认值
* @throws InvalidParamException 如果$array既不是数组也不是对象。
*/
function getValue($array, $key, $default = null)
{
if (is_array($key)) {
$lastKey = array_pop($key);
foreach ($key as $keyPart) {
$array = getValue($array, $keyPart);
}
$key = $lastKey;
}
if (is_array($array) && array_key_exists($key, $array)) {
return $array[$key];
}
if (($pos = strrpos($key, '.')) !== false) {
$array = getValue($array, substr($key, 0, $pos), $default);
$key = substr($key, $pos + 1);
}
if (is_object($array)) {
//如果该属性不存在,或者预期没有实现,则预期失败。
//事先检查属性是否可访问是不可靠的
return $array->$key;
} elseif (is_array($array)) {
return array_key_exists($key, $array) ? $array[$key] : $default;
} else {
return $default;
}
}
来源:CSDN
作者:FishTailStudio
链接:https://blog.csdn.net/gibiguvuggu/article/details/103987453