我的问题类似于Searching for an array key branch inside a large array tree - PHP,但有不同的限制(如动态处理等),为什么不为了知识,我只想使用 PHP 递归来实现它。
考虑以下数据:
array(
'root_trrreeee1' => array(
'path1' => array(
'description' => 'etc',
'child_of_path_1' => array(
array('name' => '1'),
array('name' => '1')
)
),
'path1' => array(
'description' => 'etc',
'child_of_path_1' => array(
array('name' => '1'),
array('name' => '1')
)
),
),
'name' => '1',
1 => array('name' => '1'),
'another_leaf' => '1'
)
如果我搜索array('name' => '1')
它应该返回我需要遍历以获取该值的路径root_trrreeee1.path1.child_of_path_1.o
,最好以数组形式返回:
array(
0 => root_trrreeee1
1 => path1
2 => child_of_path_1
3 => 0
)
这是我试图实现但它不起作用的递归函数:
function multidimensional_preserv_key_search($haystack, $needle, $path = array(), &$true_path = array())
{
if (empty($needle) || empty($haystack)) {
return false;
}
foreach ($haystack as $key => $value) {
foreach ($needle as $skey => $svalue) {
if (is_array($value)) {
$path = multidimensional_preserv_key_search($value, $needle, array($key => $path), $true_path);
}
if (($value === $svalue) && ($key === $skey)) {
$true_path = $path;
return $true_path;
}
}
}
if (is_array($true_path)) { return array_reverse(flatten_keys($true_path)); }
return $path;
}
function flatten_keys($array)
{
$result = array();
foreach($array as $key => $value) {
if(is_array($value)) {
$result[] = $key;
$result = array_merge($result, self::flatten_keys($value));
} else {
$result[] = $key;
}
}
return $result;
}
它只返回一个空数组。提前致谢。
我发现了类似的问题: