在Python中,字典可以使用get取值, 可以传入第二个参数作为默认值,如果字典中没有这个key对应的值,就会返回默认值
# -*- coding: utf-8 -*-
data = {
'name': 'Tom',
'age': 23
}
print(data.get('name'))
# Tom
print(data.get('school'))
# None
print(data.get('school', 'puk'))
# puk
PHP中没有提供类似的功能,我们自己实现一个关联数组取值
<?php
function array_get($array, $key, $default = null)
{
return isset($array[$key]) ? $array[$key] : $default;
}
$data = [
'name' => 'Tom',
'age' => 23
];
var_dump(array_get($data, 'name'));
// string(3) "Tom"
var_dump(array_get($data, 'school'));
// NULL
var_dump(array_get($data, 'school', 'puk'));
// string(3) "puk"
2022年10月11日补充:
该实现方法有个问题,如果是如下取值方式
$data = [
'name' => 'Tom',
'age' => 23,
'email' => null,
];
$value = array_get($data, 'email', '');
var_dump($value);
// string(0) ""
我期待的是取到 null
, 不过却取到了给定的默认值空字符
看一下文档原文:https://www.php.net/manual/zh/function.isset.php
isset — 检测变量是否已声明
并且其值不为 null
故而,获取不到目标对象的null
值,改进如下
<?php
function array_get($array, $key, $default = null)
{
if(is_array($array) && array_key_exists($key, $array)){
return $array[$key];
} else{
return $default;
}
}
测试
$data = [
'name' => 'Tom',
'age' => 23,
'email' => null,
];
$value = array_get($data, 'email', '');
var_dump($value);
// NULL
$value = array_get($data, 'name');
var_dump($value);
// string(3) "Tom"
$value = array_get($data, 'sex');
var_dump($value);
// NULL
$value = array_get($data, 'sex', 'man');
var_dump($value);
// string(3) "man"