我正在做一个函数,看起来像这样:
public function myfunction($mainArr, $keys) {
// $mainArr: a nested associative array
// $keys: a simple array of strings, example: array('string_1', 'string_2', 'string_3')
$totalKeys = count(keys);
if(totalKeys == 1) {
return mainArr[keys[0]];
} else if(totalKeys == 2) {
return mainArr[keys[0]][keys[1]];
} else if(totalKeys == 3) {
return mainArr[keys[0]][keys[1]][keys[2]];
} else if(totalKeys == 4) {
return mainArr[keys[0]][keys[1]][keys[2]][keys[3]];
} else if(totalKeys == 5) {
return mainArr[keys[0]][keys[1]][keys[2]][keys[3]][keys[4]];
}
// the same pattern continues..
}
我想把这个函数变成一个更动态的东西,而不是一个大的"如果"条件列表,这是可能的吗?
你可以这样做:
function get_value(array $source, array $keys) {
foreach ($keys as $key) {
if (isset($source[$key])) {
$source = $source[$key];
}
else {
return null;
}
}
return $source;
}
如果$keys
在$source
中描述了一个无效的路径,则返回null
。