Reputation: 673
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
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