我得到了以下结构:
Array
(
[0] => Array
(
[id] => 1
[children] => Array
(
[0] => Array
(
[id] => 5
)
[1] => Array
(
[id] => 7
)
[2] => Array
(
[id] => 8
[children] => Array
(
[0] => Array
(
[id] => 10
)
[1] => Array
(
[id] => 4
)
)
)
[3] => Array
(
[id] => 6
)
[4] => Array
(
[id] => 3
)
[5] => Array
(
[id] => 2
)
[6] => Array
(
[id] => 9
)
)
)
[1] => Array
(
[id] => 13
)
)
我想知道的是键的根结构。换句话说,
我们的身份证号码是10号。我至少想知道它的根结构。这就是我对它的描述)
结果应该是:
$result = array(
0 => 1,
1 => 8
);
但我不知道如何实现这一点。也不知道如何开始。我唯一能想到的就是创建几个子数组,其中包含所有子数组,然后再次运行数组并检查ID是否可用。但是在复杂结构的情况下。在速度方面,这几乎是不可行的。
我希望任何人都知道解决这个问题的办法。
这篇文章很好,因为人们认为它太简单了。但我仍在寻找答案。递归函数对我不起作用
///########-------------------------------------------------------------
///########-------------------------------------------------------------
///######## FUNCTION TO GET THE PAGE ORDER
///########-------------------------------------------------------------
///########-------------------------------------------------------------
private function GetPageLocation($PageArray, $PreFix = array()){
///######## RETURN THE COLLECTED DATA
foreach($PageArray as $key => $value){
///######## IF THE PAGE HAS BEEN SET
if(isset($value['id']) === true){
echo PHP_EOL.$value['id'];
///######## IF THE ID IS NOT THE CURRENT ID
if($value['id'] != $this->PageID){
///######## ADD THE PREFIX
$PreFix[] = $value['id'];
}
///######## IF THE ID IS THE CURRENT ID
else{
exit('sdd');
///######## HALT THE LOOP
break;
}
}
///######## IF THE VALUE IS AN ARRAY
if(isset($value['children']) === true){
///######## EXECUTE HIMSELF
$PreFix = array_merge($PreFix, $this->GetPageLocation($value, $PreFix));
}
///######## IF THE VALUE IS NO ARRAY
else{
}
}
///########==================================================
///######## RETURN THE PREFIX
///########==================================================
return($PreFix);
///########==================================================
}
一个简单的递归解:
<?php
// your array:
$arr = array(
array(
'id' => 1,
'children' => array(
array( 'id' => 5 ),
array( 'id' => 7 ),
array( 'id' => 8,
'children' => array(
array( 'id' => 10),
array( 'id' => 4 )
)
),
array( 'id' => 6 ),
array( 'id' => 3 ),
array( 'id' => 2 ),
array( 'id' => 9 )
)
),
array( 'id' => 13 )
);
// The recursive function which finds the path to the element having the specified $id
// through the $out parameter in the specified $arr.
function path_to_element($arr, $id, &$out) {
foreach($arr as $el) {
if($el['id']==$id) return true;
else if(isset($el['children']) && is_array($el['children'])) {
$out[] = $el['id'];
if(path_to_element($el['children'], $id, $out)!==true)
array_pop($out);
else return true;
}
}
return false;
}
$out = array(); // The array will be filled with the path to the element
echo '<pre>';
path_to_element($arr, 10, $out);
print_r($out);
?>
输出将是:
Array
(
[0] => 1
[1] => 8
)