Я не совсем уверен, что понимаю, какой конкретный формат должен иметь выходной массив.Если первое измерение массива представляет собой одну строку, вы должны быть в состоянии сделать следующее:
array_values(Set::combine(reset($this->data), '/Tree/id', '/Tree'));
Если в нем несколько строк, вам нужно будет выполнить итерацию по этому первому измерению массива с помощью foreach
и Set::combine
каждая строка по очереди, используя Set::merge
для объединения результатов в ваш выходной массив:
$outArray = array()
foreach($this->data as $row) {
$outArray = Set::merge( $outArray, Set::combine($row, '/Tree/id', '/Tree'));
}
Надеюсь, это поможет.
Обновление:
Исходя из требований, разъясненных в комментариях, вы должны преобразовать массивы следующим образом:
$outArray = array('Tree'=>array());
foreach($this->data as $row) {
$outArray['Tree'] = Set::merge(
$outArray['Tree'],
Set::combine($row, '{n}.Tree.id', '{n}.Tree')
);
}