У меня небольшая проблема, с которой мне нужна помощь. Необходимо преобразовать структуру PHP Nested Tree в массив
$array = {
array(
'id' => 1,
'name' => 'john'
'left' => '1'
'right' => '4'
),
array(
'id' => 2,
'name' => 'jane'
'left' => '2'
'right' => '3'
)
}
К
$array = array(
'id' => 1,
'name' => 'john',
'childs' => array(
array(
'id' => 2,
'name' => 'jane'
)
)
)
Вот архитектура дерева.
http://fuelphp.com/docs/packages/orm/model/nestedset.html
Мне нужно как родительский дочерний массив
If left and right keys represent indexes in $array then:
$out = array();
foreach ($array as $index => $data) {
$storeKey = sprintf("%s_%s", $data['id'], $data['name']);
$keysToCopy = array('id', 'name');
if(!isset($out[$storeKey])){
$out[$storeKey] = array_merge(
array_intersect_key($data, array_flip($keysToCopy)),
array("childs" => array())
);
}
$check = array('left', 'right');
foreach ($check as $checkChild) {
if(isset($array[$data[$checkChild]])){
$child = array_intersect_key($array[$data[$checkChild]], array_flip($keysToCopy));
$out[$storeKey]['childs'][] = $child;
}
}
}
$out = array_values($out);
var_dump($out);
Хорошо, если это просто массив, который вы разместили:
$newArray = array(
'id' => $oldArray[0]['id'],
'name' => $oldArray[0]['name'],
'childs' => array(
'id' => $oldArray[1]['id'],
'name' => $oldArray[1]['name']
)
);
Если вам это нужно в цикле, вам нужно предоставить больше информации. Как уже упоминалось в комментариях, что определяет, что Джейн — дитя Джона?