这是我刚刚写只是为了得到这个想法的例子。
注意这会在第一次出现匹配值时中断执行。
codepad link
$arr = array(
array('a','b','c','d'),
array(61,62,63,64,65),
array('e','f','g','h'),
array(6,7,8,9),
array(1,2,array(1,2,3,4,5,6,7,8),4,5,6,7,8),
array('i','j','k','l','m'),
);
function array_walkup($desired_value, array $array, array $keys=array()) {
if (in_array($desired_value, $array)) {
array_push($keys, array_search($desired_value, $array));
return $keys;
}
foreach($array as $key => $value) {
if (is_array($value)) {
$k = $keys;
$k[] = $key;
if ($find = array_walkup($desired_value, $value, $k)) {
return $find;
}
}
}
return false;
}
$keys = array_walkup(3, $arr);
echo "3 has been found in \$arr[".implode('][', $keys)."]";
如果你只有一个“子”元素的引用,没有办法从中得到它的“父”元素除非直到达到孩子在整个结构递归迭代。也许你应该使用树状数据结构,比如PEAR中的[Tree](http://pear.php.net/package/Tree)? –
嗯。也许我应该确实:)让我们看看社区中的其他人是否有任何补充。 – Stann