【问题标题】:Use array as list of keys for accessing element in another array [duplicate]使用数组作为访问另一个数组中元素的键列表[重复]
【发布时间】:2016-02-02 23:24:53
【问题描述】:

好的,假设我有一个数组,$arr。我想访问$arr['a']['b']['c']...。我还有另一个数组$keys,看起来像这样:['a', 'b', 'c', ...]。如何使用$keys作为标识符来访问$arr的子元素?

换句话说,我基本上想做一些类似的事情:$arr[$keys[0]][$keys[1]][$keys[2]]。除了在那个例子中,我硬编码它只有在$keys 正好有三个元素时才能工作;这不好,我希望$keys 具有任意长度。

如果我已经成功地解释了我想要做什么,有人可以告诉我这是否可能吗?非常感谢。

【问题讨论】:

  • 我希望 $keys 具有任意长度。 意味着您必须在 $arr 中有这些索引,对吧?
  • 嗯,是的,我们可以假设我在$keys 中拥有的所有索引确实存在于$arr 中。
  • $keys 有任意数量的元素,但 $arr 将始终是 3 维的?而且您总是想从 3 个维度获取数据,或者更少/更多?
  • 还有,你的$arr有多少个维度?
  • $arr 是 N 维的,$keys 的长度是 N 或更短。我事先不知道N是什么。我现在在想,这个问题的解决方案可能是递归的,我实际上可能对答案有所了解......

标签: php arrays


【解决方案1】:

我想我明白了。数字解决方案将是递归的。这是我想出的(尚未经过测试,但在我的脑海中我很确定它是正确的):

public function getDeepElement($arr, $keys) {
    if (count($keys) == 0) { // base case if $keys is empty
        return $arr;
    }
    if (count($keys) == 1) { // base case if there's one key left
        return $arr[$keys[0]];
    }
    $lastKey = array_pop($keys); // remove last element from $keys
    $subarr = $arr[$lastKey]; // go down a level in $arr
    return getDeepElement($subarr, $keys);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 2020-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    相关资源
    最近更新 更多