【发布时间】:2015-02-21 23:31:36
【问题描述】:
我需要在数组中找到一个特定的键,并返回它的值和找到该键的路径。示例:
$array = array(
'fs1' => array(
'id1' => 0,
'foo' => 1,
'fs2' => array(
'id2' => 1,
'foo2' => 2,
'fs3' => array(
'id3' => null,
),
'fs4' => array(
'id4' => 4,
'bar' => 1,
),
),
),
);
search($array, 'fs3'); // Returns ('fs1.fs2.fs3', array('id3' => null))
search($array, 'fs2'); // Returns ('fs1.fs2', array('id2' => 1, ... ))
我已经能够通过数组递归找到正确的键并使用RecursiveArrayIterator(如下所示)返回数据,但我不知道跟踪我当前路径的最佳方法开。
$i = new RecursiveIteratorIterator
new RecursiveArrayIterator($array),
RecursiveIteratorIterator::SELF_FIRST);
foreach ($i as $key => value) {
if ($key === $search) {
return $value;
}
}
【问题讨论】:
-
键总是唯一的吗?当所有键都适合一个维度时,这种方式违背了将数组作为多维的目的。你只想返回第一个实例还是一个数组?
-
@JonathanKuhn 键不一定是唯一的,但是返回第一个结果就可以了。我继承了搜索数组的结构,因此无法更改它。
-
在我看来,您可以仅使用递归函数和简单的 foreach 循环来跟踪您的进度。
-
这就是我要建议的——只需使用一个简单的递归函数。
-
要从
recursiveIteratorIterator获取密钥,请查看:stackoverflow.com/questions/16855211/…
标签: php arrays multidimensional-array iterator