I need to convert a hierarchical multidimensional array into a 2d array by recursively traversing each subset of data and push them into a result array.
Input:
$multi = [
[
'case_code_id' => 1,
'parent_id' => 0,
'case_code' => 'Main A',
'sub_codes' => [
[
'case_code_id' => 3,
'parent_id' => 1,
'case_code' => 'Sub A',
'sub_codes' => [
[
'case_code_id' => 5,
'parent_id' => 3,
'case_code' => 'Sub Sub A',
'sub_codes' => []
]
]
],
[
'case_code_id' => 4,
'parent_id' => 1,
'case_code' => 'Sub B',
'sub_codes' => []
]
]
],
[
'case_code_id' => 2,
'parent_id' => 0,
'case_code' => 'Main B',
'sub_codes' => []
]
]
Desired result:
Array
(
[0] => Array
(
[case_code_id] => 1
[parent_id] => 0
[case_code] => Main A
)
[1] => Array
(
[case_code_id] => 3
[parent_id] => 1
[case_code] => Sub A
)
[2] => Array
(
[case_code_id] => 5
[parent_id] => 3
[case_code] => Sub Sub A
)
[3] => Array
(
[case_code_id] => 4
[parent_id] => 1
[case_code] => Sub B
)
[4] => Array
(
[case_code_id] => 2
[parent_id] => 0
[case_code] => Main B
)
)
I have tried several loops but nothing returns the full array.
Here is what I have for my loop:
public function array_flatten($array, $list = array()) {
for ($i = 0; $i < count($array); $i++) {
$results[] = array(
'case_code_id' => $array[$i]['case_code_id'],
'case_code' => $array[$i]['case_code'],
'parent_id' => $array[$i]['parent_id']
);
if (count($array[$i]['sub_codes']) > 0) {
$this->array_flatten($array[$i]['sub_codes'], $results);
} else {
$results[] = $array[$i];
}
}
return $results;
}
And I'm calling it like this: ($multi contains the multidimensional array)
$flat = $this->array_flatten($multi);
The variable $multi is created from this function:
public function build_case_code_tree(array $elements, $parentId = 0) {
$branch = array();
foreach ($elements as $element) {
if ($element['parent_id'] == $parentId) {
$children = $this->build_case_code_tree($elements, $element['case_code_id']);
$element['sub_codes'] = $children;
$branch[] = $element;
}
}
return $branch;
}
Any thoughts?
$multifor us instead of expecting us to mock up our own data based on yourprint_r(). It generally helps you to get relevant and working answers when you provide an easy way for us to test the sample data...