数组键由另一个数组值组成

时间:2012-07-05 23:05:08

标签: php arrays logic

我有一个数组$ 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中的值)是可选的。

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

1 个答案:

答案 0 :(得分:2)

你需要循环键数组并将每个级别分配给一个变量,直到你应该拥有你想要的值为止。

像这样(未经测试,没有错误检查):

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