这几乎肯定是this question的重复,但我想我的问题更多是关于常见的惯例/最佳实践,给出答案。
示例:
if(isset($this->_available[$option]['accepts_argument']) && $this->_available[$option]['accepts_argument']) {
// do something
}
这只是丑陋的。但如果我不做第一次检查,我得到一个PHP通知。我应该确保数组键'accepts_argument'始终存在,并且默认为false?这样我就可以测试它是否属实,而不是测试它是否存在?
我不应该担心丑陋/冗长吗?
我在代码中注意到这种模式很多,只是想知道人们如何处理它。我目前正在使用php 5.4,如果这很重要,但是如果5.5+中有一些我想做的东西,我可以升级它。
由于
答案 0 :(得分:0)
这是我使用的可以帮助您的功能:
/** todo handle numeric values
* @param array $array The array from which to get the value
* @param array $parents An array of parent keys of the value,
* starting with the outermost key
* @param bool $key_exists If given, an already defined variable
* that is altered by reference
* @return mixed The requested nested value. Possibly NULL if the value
* is NULL or not all nested parent keys exist.
* $key_exists is altered by reference and is a Boolean
* that indicates whether all nested parent keys
* exist (TRUE) or not (FALSE).
* This allows to distinguish between the two
* possibilities when NULL is returned.
*/
function &getValue(array &$array, array $parents, &$key_exists = NULL)
{
$ref = &$array;
foreach ($parents as $parent) {
if (is_array($ref) && array_key_exists($parent, $ref))
$ref = &$ref[$parent];
else {
$key_exists = FALSE;
$null = NULL;
return $null;
}
}
$key_exists = TRUE;
return $ref;
}
即使此数组是嵌套的,它也会获取数组中元素的值。如果路径不存在,则返回null。魔术!
示例:
$arr = [
'path' => [
'of' => [
'nestedValue' => 'myValue',
],
],
];
print_r($arr);
echo getValue($arr, array('path', 'of', 'nestedValue'));
var_dump(getValue($arr, array('path', 'of', 'nowhere')));