php - 通过一系列键在多维数组中深入获取值

标签 php arrays

如果一个数组$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/

相关文章:

python - 将 0 替换为 pandas 数据帧中数组中的最后一个值(类似于具有 NaN 值的 fillna 方法)

c - 动态分配链表数组

python - (P, Q) 和 (R,) 之间的曼哈顿距离

Javascript - 在函数中返回数组长度

php - 比较两个 texbox 中 mysql 数据库的值,无需提交表单

javascript - Php Ajax 表单未提交

php - PHP 中的 CMS - 数据库设计

PHP MySQL : Updating users profile

php - mysql中的主从概念对CRM应用程序有好处吗?

python - 在循环的条件语句中调用 len() 可以吗?