Группировать и переупорядочивать элементы массива в PHP - PullRequest
3 голосов
/ 12 июля 2020

У меня есть многомерный массив, который я хочу перегруппировать. Массив выглядит следующим образом.

$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
        )

);

Я хочу, чтобы он был переупорядочен так, чтобы он был сгруппирован в BASE_PRICE и MARKUP следующим образом.

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

Как использовать циклы для получения нового массива? Любая помощь будет принята с благодарностью.

До сих пор я пробовал следующее, но не получил того, чего ожидал.

arsort($originalArray);

Ответы [ 3 ]

1 голос
/ 12 июля 2020

Вы можете получить желаемый массив, используя

 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
        )

)
0 голосов
/ 12 июля 2020

Вы можете использовать функцию array-reduce следующим образом:

<?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);
?>
0 голосов
/ 12 июля 2020

вы можете использовать asort функцию:

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