function getChildrenOf($ary, $id)
{
foreach ($ary as $el)
{
if ($el['id'] == $id)
return $el;
}
return FALSE; // use false to flag no result.
}
$children = getChildrenOf($myArray, 1); // $myArray is the array you provided.
Если я что-то не упустил, итерируйте по массиву, ища что-то, что соответствует ключу id
и идентификатору, который вы ищете (затем верните его в результате).Вы также можете выполнять итеративный поиск (и дать мне секунду, чтобы опубликовать код, который вместо этого будет проверять клавишу parentId
) ...
-
Рекурсивная версия,Включает дочерние элементы:
function getChildrenFor($ary, $id)
{
$results = array();
foreach ($ary as $el)
{
if ($el['parent_id'] == $id)
{
$results[] = $el;
}
if (count($el['children']) > 0 && ($children = getChildrenFor($el['children'], $id)) !== FALSE)
{
$results = array_merge($results, $children);
}
}
return count($results) > 0 ? $results : FALSE;
}
Рекурсивная версия, исключая дочерние элементы
function getChildrenFor($ary, $id)
{
$results = array();
foreach ($ary as $el)
{
if ($el['parent_id'] == $id)
{
$copy = $el;
unset($copy['children']); // remove child elements
$results[] = $copy;
}
if (count($el['children']) > 0 && ($children = getChildrenFor($el['children'], $id)) !== FALSE)
{
$results = array_merge($results, $children);
}
}
return count($results) > 0 ? $results : FALSE;
}