如果一个数组$array
和按键序列$keys = array('key1','key2','key3')
如何获取 $array[$keys[1]][$keys[2]][$keys[3]]
给定键的数量不确定,可能有 4 个键,还是 1 把 key 等等?
我目前的代码是:
switch(count($keys)) {
case 1:
if(array_isset($array[$keys[0]]), $array)
$value = $array[$keys[0]];
break;
case 2:
if(array_isset($array[$keys[0]][$keys[1]]), $array[$keys[0]])
$value = $array[$keys[0]][$keys[1]];
break;
case 3:
if(array_isset($array[$keys[0]][$keys[1]][$keys[2]]), $array[$keys[0]][$keys[1]])
$value = $array[$keys[0]][$keys[1]][$keys[2]];
break;
case 4:
if(array_isset($array[$keys[0]][$keys[1]][$keys[2]][$keys[3]]), $array[$keys[0]][$keys[1]][$keys[2]])
$value = $array[$keys[0]][$keys[1]][$keys[2]][$keys[3]];
break;
default:
break;
}
function array_isset($key, Array $array) {
if(isset($array[$key])) {
return true;
}
return array_key_exists($key, $array);
}
有更好的主意吗?我不想使用评估
已更新,所以根据 Alma Do Mundo 的最终代码
$result = $array[$keys[0]];
for($i=1;$i<count($keys);$i++) {
if(array_isset($keys[$i], $result))
$result = $result[$keys[$i]];
else {
$result = null;
break;
}
}
最佳答案
用一个简单的循环:
//for PHP <=5.3 replace short [] to array()
$rgData = ['key1'=>['key2'=>['key3'=>'test', 'key4'=>'data'], 'key5'=>'done']];
$rgKeys = ['key1','key2','key3'];
$rgResult = $rgData[$rgKeys[0]];
for($i=1; $i<count($rgKeys); $i++)
{
$rgResult=$rgResult[$rgKeys[$i]];
}
eval
可能有一个选项,但我会说 - 永远不要使用 eval
- 如果你能避免它。
关于php - 通过一系列键在多维数组中深入获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18892217/