【发布时间】:2017-03-23 06:53:40
【问题描述】:
试图找出一种在多维数组中获取项目的父 ID 的方法:
$Arr = array(
array(
"Id" => 1,
"Parent" => 0,
"Children" => array(
array(
"Id" => 2,
"Parent" => 1,
"Children" => array(),
),
array(
"Id" => 3,
"Parent" => 1,
"Children" => array(
array(
"Id" => 4,
"Parent" => 3,
"Children" => array(),
),
),
),
),
),
array(
"Id" => 5,
"Parent" => 0,
"Children" => array(
array(
"Id" => 6,
"Parent" => 5,
"Children" => array(),
),
),
)
);
我需要获取“Parent”= 0 的顶部元素的“Id”。即对于 ID 为 4 的项目,它应该返回 1 作为结果,或者搜索 6 将返回 5。我尝试了各种递归函数方式,但只有在深度为 2 时才能获得正确的结果。
我找到了这个函数,但它似乎返回的是键名而不是值:
function find_parent($array, $needle, $parent = null) {
foreach ($array as $key => $value) {
if (is_array($value)) {
$pass = $parent;
if (is_string($key)) {
$pass = $key;
}
$found = find_parent($value, $needle, $pass);
if ($found !== false) {
return $found;
}
} else if ($key === 'Id' && $value === $needle) {
return $parent;
}
}
return false;
}
编辑
以下仅适用于第一级/深度:
function GetParent($Data = array(), $Needle = 0){
foreach($Data as $Key => $Item){
if($Item['Id'] === $Needle && $Item['Parent'] == 0){
return $Item['Id'];
}
if(sizeof($Item['Children']) !== 0)
GetParent($Item['Children'], $Item['Parent']);
}
return false;
}
我不明白我做错了什么。
【问题讨论】:
-
而不是遍历所有键,你不只是检查子值像
if ($arr['Id'] == $needle) { return $arr['Parent']; } -
你要返回什么?
-
@Duvdevan:我想返回父元素的“Id”值。如果搜索 6,则该函数应返回 5,如果搜索 4,则应返回 1。
标签: php recursion multidimensional-array parent