如果我有一个充满信息的数组,有没有办法在键不存在的情况下设置返回值的默认值?
function items() {
return array(
'one' => array(
'a' => 1,
'b' => 2,
'c' => 3,
'd' => 4,
),
'two' => array(
'a' => 1,
'b' => 2,
'c' => 3,
'd' => 4,
),
'three' => array(
'a' => 1,
'b' => 2,
'c' => 3,
'd' => 4,
),
);
}在我的代码中
$items = items();
echo $items['one']['a']; // 1但是,如果我给出了一个不存在的键,是否可以返回一个默认值,
$items = items();
echo $items['four']['a']; // DOESN'T EXIST RETURN DEFAULT OF 99发布于 2013-07-03 16:31:26
我知道这是一个老生常谈的问题,但是我在谷歌上搜索"php“就找到了这个问题,我想我应该把我想要的解决方案贴出来,可能会对其他人有所帮助。
我想要一个具有默认选项值的数组,这些值可以被自定义值覆盖。我最终使用了array_merge。
示例:
<?php
$defaultOptions = array("color" => "red", "size" => 5, "text" => "Default text");
$customOptions = array("color" => "blue", "text" => "Custom text");
$options = array_merge($defaultOptions, $customOptions);
print_r($options);
?>输出:
Array
(
[color] => blue
[size] => 5
[text] => Custom text
)发布于 2016-10-29 18:01:03
在PHP7中,有一个专门为这些情况设计的新操作符,称为Null Coalesce Operator。
所以现在你可以这样做:
echo $items['four']['a'] ?? 99;而不是
echo isset($items['four']['a']) ? $items['four']['a'] : 99;在PHP7之前,还有另一种方法可以做到这一点:
function get(&$value, $default = null)
{
return isset($value) ? $value : $default;
}下面的代码将正常工作,不会出现问题:
echo get($item['four']['a'], 99);
echo get($item['five'], ['a' => 1]);但请注意,使用这种方式,在非数组值上调用数组属性将抛出错误。例如。
echo get($item['one']['a']['b'], 99);
// Throws: PHP warning: Cannot use a scalar value as an array on line 1此外,在某些情况下会抛出致命错误:
$a = "a";
echo get($a[0], "b");
// Throws: PHP Fatal error: Only variables can be passed by reference最后,有一个丑陋的变通方法,但几乎工作得很好(在某些情况下,如下所述的问题):
function get($value, $default = null)
{
return isset($value) ? $value : $default;
}
$a = [
'a' => 'b',
'b' => 2
];
echo get(@$a['a'], 'c'); // prints 'c' -- OK
echo get(@$a['c'], 'd'); // prints 'd' -- OK
echo get(@$a['a'][0], 'c'); // prints 'b' -- OK (but also maybe wrong - it depends)
echo get(@$a['a'][1], 'c'); // prints NULL -- NOT OK
echo get(@$a['a']['f'], 'c'); // prints 'b' -- NOT OK
echo get(@$a['c'], 'd'); // prints 'd' -- OK
echo get(@$a['c']['a'], 'd'); // prints 'd' -- OK
echo get(@$a['b'][0], 'c'); // prints 'c' -- OK
echo get(@$a['b']['f'], 'c'); // prints 'c' -- OK
echo get(@$b, 'c'); // prints 'c' -- OK发布于 2012-03-04 22:45:52
这应该能起到作用:
$value = isset($items['four']['a']) ? $items['four']['a'] : 99;如果你必须大量编写这些代码,那么辅助函数将非常有用:
function arr_get($array, $key, $default = null){
return isset($array[$key]) ? $array[$key] : $default;
}https://stackoverflow.com/questions/9555758
复制相似问题