我有一个很长的多维数组值,它可能存在,也可能不存在。
在不重复引用多维数组的情况下,检查它是否已设置、使用它的值或使用替代值的最有效方法是什么?在这里你可以看到长数组被引用了两次,这可以避免吗?
$source = null;
$default = 'something';
if(isset($request['controller']['options']['data']['source'])) {
$source = $request['controller']['options']['data']['source'];
} else {
$source = $default;
}
$source = null;
$default = 'something';
if(isset($request['controller']['options']['data']['source']) && $request['controller']['options']['data']['source']) {
$source = $request['controller']['options']['data']['source'];
} else {
$source = $default;
}
如果你不想按照我在评论中所说的那样做,或者你想避免你正在做的事情,还有另一种方法。
(isset($request['controller']['options']['data']['source'])) ? $source = $request['controller']['options']['data']['source']
: ($source = $default);
This
$your_variable = $request['controller']['options']['data']['source'];
如果任何键不存在,将导致警告。这样是行不通的。我认为最好的方法是创建一个辅助方法来实现
<?php
/**
* Retrieve value from a multi dimensional array or default if key not exists
*
* @param array $input
* @param array $key_list
* @param mixed $default
* @return mixed
*/
function mda_helper(array $input, array $key_list, $default) {
foreach ($key_list as $key) {
if (!array_key_exists($key, $input)) {
return $default;
}
$input = $input[$key];
}
return $input;
}
$request = [
'controller' => [
'options' => [
'data' => [
//'source' => 'foo'
]
]
]
];
$default = 'something';
$source = mda_helper($request, ['controller', 'options', 'data', 'source'], $default);
从PHP 7开始,使用"null coalesce"。"isset ternary")操作符:
$source = ($request['controller']['options']['data']['source'] ?? $default)
$source = null;
$default = 'something';
if(isset($request['controller']['options']['data']['source']) && !empty($request['controller']['options']['data']['source'])) {
$source = $request['controller']['options']['data']['source'];
} else {
$source = $default;
}