PHP获取数组的值的函数 getValue 避免Notice

PHP获取数组的值的函数 getValue 避免Notice


在写代码过程中,经常会遇到取了一个数组的不存在的下标的值的情况,例如下列代码:

$array = [
    'foo' => [
        'bar' => 10,
    ]
];
$value = $array['a'];

会产生如下的Notice:

Notice: Undefined index: a in xxx on line 6

为了避免这种情况我们可能会这样写:

$value = isset($array['foo']['bar']) ? $array['foo']['bar'] : '';

Yii 2.0 框架有个数组助手类(ArrayHelper),通过这个类的getValue函数可以非常方便的获取数组的值:

$value = ArrayHelper::getValue($array, 'foo.bar', '');

我将这个取数组值的函数取出来了:

<?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;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值