laloune
laloune

Reputation: 673

Build child/parent from nested array

i have the following array:

$array[] = array('person'=>'1','name'=>'john','children'=>array(array('person'=>'11','name'=>'frank'),array('person'=>'12','name'=>'billie'),array('person'=>'13','name'=>'will')));

$array[] = array('person'=>'11','name'=>'frank','children'=>array(array('person'=>'111','name'=>'jack'),array('person'=>'112','name'=>'jamie')));
$array[] = array('person'=>'12','name'=>'billie','children'=>array(array('person'=>'121','name'=>'melanie'),array('person'=>'122','name'=>'fran'),array('person'=>'123','name'=>'monica')));
$array[] = array('person'=>'13','name'=>'will');

$array[] = array('person'=>'111','name'=>'jack');
$array[] = array('person'=>'112','name'=>'jamie');
$array[] = array('person'=>'121','name'=>'melanie');
$array[] = array('person'=>'122','name'=>'fran');
$array[] = array('person'=>'123','name'=>'monica','children'=>array(array('person'=>'1231','name'=>'marcus'),array('person'=>'1232','name'=>'fiona')));

$array[] = array('person'=>'1231','name'=>'marcus');
$array[] = array('person'=>'1232','name'=>'fiona');

I need it to be reduced to a simple key/value array, with "child=>parent", e.g.:

array('frank'=>'john');
array('billie'=>'john');
...
array('marcus'=>'monica');

I tried with recursive function but with no luck, this is quite a brainer to me:

function buildTree($inputArray, $nameToCheck){
    $arrayFinal = array();
    foreach($inputArray as $data){
        if($data['name'] == $nameToCheck){
            
            if (is_array($data['children'])){               
                foreach($data['children'] as $childrenName){
                    $name = $childrenName['name'];                
                    $arrayFinal[$name] = buildTree($inputArray, $name);
                }            
            }
        }
    }
    return $arrayFinal;
}

any idea ?

Upvotes: 0

Views: 45

Answers (1)

ikhvjs
ikhvjs

Reputation: 5937

Is this what you want? example

<?php
$array[] = array(
    'person' => '1', 'name' => 'john',
    'children' => array(
        array('person' => '11', 'name' => 'frank'),
        array('person' => '12', 'name' => 'billie'),
        array('person' => '13', 'name' => 'will')
    )
);

$array[] = array(
    'person' => '11', 'name' => 'frank',
    'children' => array(
        array('person' => '111', 'name' => 'jack'),
        array('person' => '112', 'name' => 'jamie')
    )
);

$array[] = array(
    'person' => '12', 'name' => 'billie',
    'children' => array(
        array('person' => '121', 'name' => 'melanie'),
        array('person' => '122', 'name' => 'fran'),
        array('person' => '123', 'name' => 'monica')
    )
);

$array[] = array('person' => '13', 'name' => 'will');

$array[] = array('person' => '111', 'name' => 'jack');
$array[] = array('person' => '112', 'name' => 'jamie');
$array[] = array('person' => '121', 'name' => 'melanie');
$array[] = array('person' => '122', 'name' => 'fran');

$array[] = array(
    'person' => '123', 'name' => 'monica',
    'children' => array(
        array('person' => '1231', 'name' => 'marcus'),
        array('person' => '1232', 'name' => 'fiona')
    )
);

$array[] = array('person' => '1231', 'name' => 'marcus');
$array[] = array('person' => '1232', 'name' => 'fiona');

$output = [];


foreach ($array as $parent) {
    if (isset($parent["children"])) {
        foreach ($parent["children"] as $child) {
            $output[] =  array($child["name"] => $parent["name"]);
        }
    }
}

print "<pre>";
print_r($output);
print "</pre>";

Upvotes: 1

Related Questions