I have array like this:
array(
array(
'id' => 1,
'children' => array(
array(
'id' => 2,
'parent_id' => 1
),
array(
'id' => 3,
'parent_id' => 1,
'children' => array(
array(
'id' => 4,
'parent_id' => 3
)
)
)
)
)
);
The array goes deeper if it's necessary. I need to get the children for any given id.
Thanks.
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.
Unless I'm missing something, iterate over the array looking for something that matches the id
key and the id you're looking for (then return it as a result). You can also iteratively search (and give me a second to post code for that, which would examine the parentId
key instead)...
--
Recursive Version, Includes Children Elements:
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;
}
Recursive Version, Excluding Children Elements
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;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With