Reputation:
I have a multidimensional array that I want to be regrouped. The array looks like the following.
$originalArray = array
(
'APPLE' => array(
'BASE_PRICE' => 7.5,
'MARKUP' => 1.2
),
'ORANGE' => array
(
'BASE_PRICE' => 0,
'MARKUP' => 4
),
'BANANA' => array
(
'BASE_PRICE' => 0,
'MARKUP' => 6
),
'LIME' => array
(
'BASE_PRICE' => 0,
'MARKUP' => 8
)
);
I want it reordered such that it is grouped into BASE_PRICE and MARKUP as the following.
$newArray = array (
'BASE_PRICE' => array
(
'APPLE' => 7.5,
'ORANGE' => 0,
'BANANA' => 0,
'LIME' => 0
),
'MARKUP' => array
(
'APPLE' => 1.2,
'ORANGE' => 6,
'BANANA' => 4,
'LIME' => 8
)
);
How do I use loops to achieve the new array? Any help would be greatly appreciated.
So far I've tried the following but not getting what I expect.
arsort($originalArray);
Upvotes: 3
Views: 60
Reputation: 10163
You can use array-reduce function by next way:
<?php
$originalArray = array
(
'APPLE' => array(
'BASE_PRICE' => 7.5,
'MARKUP' => 1.2
),
'ORANGE' => array
(
'BASE_PRICE' => 0,
'MARKUP' => 4
),
'BANANA' => array
(
'BASE_PRICE' => 0,
'MARKUP' => 6
),
'LIME' => array
(
'BASE_PRICE' => 0,
'MARKUP' => 8
)
);
$resultArray = array_reduce(
array_keys($originalArray),
function($accumulator, $key) use($originalArray) {
$accumulator['BASE_PRICE'][$key]=$originalArray[$key]['BASE_PRICE'];
$accumulator['MARKUP'][$key]=$originalArray[$key]['MARKUP'];
return $accumulator;
},[]
);
print_r($resultArray);
?>
Upvotes: 0
Reputation: 2584
You can achieve the desired array by using
foreach ($originalArray as $key => $value) {
$array1['BASE_PRICE'][$key] = $value['BASE_PRICE'];
$array2['MARKUP'][$key] = $value['MARKUP'];
}
$newarray = array_merge($array1,$array2);
Output
Array
(
[BASE_PRICE] => Array
(
[APPLE] => 7.5
[ORANGE] => 0
[BANANA] => 0
[LIME] => 0
)
[MARKUP] => Array
(
[APPLE] => 1.2
[ORANGE] => 4
[BANANA] => 6
[LIME] => 8
)
)
Upvotes: 1
Reputation: 1071
you can use asort function :
function sort_array ($inputArray){
$outputArray = array();
foreach ($inputArray as $index => $value){
$outputArray["BASE_PRICE"][$index] = $value["BASE_PRICE"];
$outputArray["MARKUP"][$index] = $value["MARKUP"];
}
foreach ($outputArray as $value){
asort($value);
asort($value);
}
return $outputArray;
}
var_dump(sort_array($originalArray));
Upvotes: 0