3

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?

So far I've tried the following but not getting what I expect.

arsort($originalArray);
2
  • Have you tried anything? Post your code so we can help you understand how to make that work or where was your problem. Commented Jul 12, 2020 at 3:08
  • Yes, I updated the question. Commented Jul 12, 2020 at 3:13

2 Answers 2

1

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
        )

)
Sign up to request clarification or add additional context in comments.

2 Comments

Awesome! Thank you. How do I order the array by value in descending order?
You can use rsort() for this
0

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

Comments