I have the following source array which I'm trying to restructure using group_name to give me the require output below.
Any help or pointers appreciated. Thanks, Lk
Source:
Array
(
[field_a] => Array
(
[type] => text
[group_name] =>
)
[field_b] => Array
(
[type] => number_integer
[group_name] => group_other
)
[field_c] => Array
(
[type] => text
[group_name] =>
)
[field_d] => Array
(
[type] => link
[group_name] => group_web_links
)
[field_e] => Array
(
[type] => link
[group_name] => group_web_links
)
[field_f] => Array
(
[type] => text
[group_name] => group_web_links
)
)
Output:
Array
(
[group_other] => Array
(
[field_b] => Array
(
[type] => number_integer
[group_name] => group_other
)
)
[group_web_links] => Array
(
[field_d] => Array
(
[type] => link
[group_name] => group_web_links
)
[field_e] => Array
(
[type] => link
[group_name] => group_web_links
)
[field_f] => Array
(
[type] => text
[group_name] => group_web_links
)
)
[field_a] => Array
(
[type] => text
[group_name] =>
)
[field_c] => Array
(
[type] => text
[group_name] =>
)
)
If key order of new array is not so important:
$new_array = array();
foreach ($old_array as $key => $value) {
if (empty($value['group_name'])) $new_array[$key] = $value;
else {
if (!array_key_exists($value['group_name'], $new_array) $new_array[$value['group_name']] = array();
$new_array[$value['group_name']][$key] = $value;
}
}
This can be accomplished by a simple foreach
loop:
$start_array; // The array you want to convert
$end_array = array (); // The final array
foreach ($start_array as $index => $value) {
if (empty($value["group_name"])) {
$end_array[$index] = $value;
} else {
$end_array[$value["group_name"]][$index] = $value;
}
}
Something like this:
$array_dst = array();
foreach ($array_src as $group_key=>$group_data){
$group_name = $group_data['group_name'];
if (empty($array_dst[$group_name]))
$array_dst[$group_name] = array();
$array_dst[$group_name][$group_key] = $group_data;
}
$new_array = array();
foreach( $old_array as $field_id => $field ) {
if( $field[ 'group_name' ] == '' ) {
$new_array[ $field_id ] = $field;
} else {
$new_array[ $field[ 'group_name' ] ][ $field_id ] = $field;
}
}
I suppose those who are down voting this are doing it because I am not initializing $new_array[ $field[ 'group_name' ] ]
. Well, that is not necessary in PHP, it will be automatically initialized with an empty array when you do $new_array[ $field[ 'group_name' ] ][ $field_id ] = $field;
.