php封装获取数组值函数,支持多维数组

项目中经常需要判断数组某个元素是否存在,如果存在就获取元素的值,不存在则用默认值。

一开始是这样写的

if(isset($array['domain'])){
    $domain = $array['domain'];
}else{
    $domain = 'www.notevm.com';
}

或者用三元运算符

$url = isset($array['domain']) ? $array['domain'] : 'www.notevm.com';

后来为了方便,就封装了个函数来获取值

function getVal($array,$key,$default=false){
    if(isset($array[$key])){
        return $array[$key];
    }else{
        return $default;
    }
}

调用方法

$array = [
    'name' => '虚拟笔记',
    'domain' => 'www.notevm.com'
];
$name = getVal($array,'name');
print_r($name);
//输出 虚拟笔记

//如果元素不存在就返回默认值
$url = getVal($array,'url','https://www.notevm.com');
print_r($url);
//这里不存在url这个键名,就会输出设置的默认值:https://www.notevm.com

这样子用起来就方便多了,不过只能用于获取一维数组的值,遇到多维数组的话就不适用了。如果只是二维数组的话$name = getVal(getVal($array,'site'),'name');这样写虽然不好看,但也勉强能接受,但是遇到三维或者更多的话就接受不了了,不仅不美观,维护也难。于是又修改了下,增加支持多维数组获取,维护也方便。

function getVal($array,$key,$default=false){
    $keys = !is_array($key) ? explode('.',$key) : $key;
    if(count($keys) == 1){
        if(isset($array[current($keys)])){
            return $array[current($keys)];
        }else{
            return $default;
        }
    }else{
        $array = $array[current($keys)];
        array_shift($keys);
        return getVal($array,$keys,$default);
    }
}

获取二维数组

$array = [
    'site' => [
        'name' => '虚拟笔记',
        'domain' => 'www.notevm.com'
    ]
];
$name = getVal($array,'site.name');
print_r($name);
php获取二维数组
测试二维数组

获取四维数组

$array = [
    'site' => [
        'name' => '虚拟笔记',
        'domain' => 'www.notevm.com',
        'page' => [
            'tags' => [
                'php' => 'https://www.notevm.com/a/tag/php'
            ]
        ]
    ]
];
$php = getVal($array,'site.page.tags.php');
print_r($php);
php获取四维数组
获取四维数组

如果元素不存在返回默认值

$linux = getVal($array,'site.page.tags.linux','https://www.notevm.com/a/tag/linux');
print_r($linux);
数组元素不存在返回默认值
元素不存在返回默认值

可以看到现在可以正常获取多维数组,代码也相对美观,维护也容易。

原创文章,作者:小哆啦,如若转载,请注明出处:https://www.notevm.com/a/5979.html

(0)
上一篇 2022年5月31日 09:36
下一篇 2022年6月2日 22:47

相关推荐