【问题标题】:Array keys by another arrays values由另一个数组值排列键
【发布时间】:2012-07-05 23:05:08
【问题描述】:

我有一个包含以下内容的数组 $params:

Array(
  0 => "array"
  1 => "arrayName" //variable
  2 => "key1" //optional&variable ie. 0 or 'foo'
  3 => "key2" //optional&variable ie. 0 or 'foo'
  //etc.
)

另外,我有一个 stdObject,其中包含正在请求的页面的所有变量(MVC 样式)。 所以,我可以有一个这样的数组:

$std = new stdObject();
$std->arrayName->array('foo', 'bar');

现在我想要 $std 数组的第一个值。因此,我在 $params 中使用“key1”参数并将其设置为“0”,因此它将选择 $std->arrayName[0] 值(“foo”)。请注意,我没有使用“key2”参数,因为我不想选择 $std->arrayName[key1][key2]。

但是如果我需要嵌套数组的值呢?

$std = new stdObject();
$std->arrayName->array('foo', array('bar', 'fish'));

我将通过将“key1”参数设置为 1 并将“key2”参数设置为 1 来请求 $std->arrayName[1][1] 值('fish')。所以它会选择 $std->arrayName[key1][key2].

但是如果我有 10 个相互嵌套的数组呢?极不可能,但有可能。我想选择 $std->arrayName[key1][key2][key3][..][key10] 来选择位于那里的某个值。 例如:$std->arrayName[0][3][4][6][2][9]['foo']['bar][9][2];

所以我的问题是:如何通过另一个数组 ($params) 中定义的值来选择某个数组 (arrayName) 的值,该数组充当第一个数组 (arrayName) 的键。但是,键的数量($params 中的值)是可选的。

也许这个问题不是完全可以理解的,所以请随时询问更多信息。

【问题讨论】:

  • 我已将问题阅读了两遍,但仍然不知道它是关于什么的。您最好修改示例,使它们具有相似的键名,因为 key_name_1foo 的关系并不明显
  • @zerkms 我改变了问题。是不是更好理解?
  • 不。就我个人而言,我仍然看不到 fishkey1 之间有任何联系
  • 鱼 = 值,key1 = 键。其中 key1 是一个变量值,可以设置为 0、1、2、'foo' 或 'bar' 只是为了选择某个值

标签: php arrays logic


【解决方案1】:

您需要循环键数组并将每个级别分配给一个变量,直到您到达终点,此时您应该拥有所需的值。

类似这样的东西(未经测试,没有错误检查):

function array_value_at ($array, $keys) {
  foreach ($keys as $key) {
    $array = $array[$key];
  }
  return $array;
}

【讨论】:

  • @Jelmer 这相对简单,不过最好在其中添加至少一个isset() 签入以确保在键数组时不会触发大量错误引用不存在的东西。这类事情开始变得有趣的地方是,当您想要获得对 keys 数组描述的项目的 reference 时,您必须非常小心不要修改输入数组。
  • 是的,我知道 ;) 为了便于理解,我将这部分远离问题 :) 感谢您的提示。将对其他人有所帮助。
猜你喜欢
  • 2016-10-22
  • 2017-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多