PHP Tree Nested установлен в многомерный массив

У меня небольшая проблема, с которой мне нужна помощь. Необходимо преобразовать структуру 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

Мне нужно как родительский дочерний массив

0

Решение

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);
2

Другие решения

Хорошо, если это просто массив, который вы разместили:

$newArray = array(
'id' => $oldArray[0]['id'],
'name' => $oldArray[0]['name'],
'childs' => array(
'id' => $oldArray[1]['id'],
'name' => $oldArray[1]['name']
)
);

Если вам это нужно в цикле, вам нужно предоставить больше информации. Как уже упоминалось в комментариях, что определяет, что Джейн — дитя Джона?

0

По вопросам рекламы [email protected]