【问题标题】:Group & reorder array elements in PHP在 PHP 中对数组元素进行分组和重新排序
【发布时间】:2020-11-01 12:17:53
【问题描述】:

我有一个想要重新组合的多维数组。数组如下所示。

$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_PRICEMARKUP,如下所示。

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

【问题讨论】:

  • 你有没有尝试过?发布您的代码,以便我们帮助您了解如何实现该功能或您的问题出在哪里。
  • 是的,我更新了问题。

标签: php arrays loops sorting multidimensional-array


【解决方案1】:

您可以通过使用来实现所需的数组

 foreach ($originalArray as $key => $value) {
  $array1['BASE_PRICE'][$key] = $value['BASE_PRICE'];
  $array2['MARKUP'][$key] = $value['MARKUP'];
 }
 $newarray = array_merge($array1,$array2);

输出

Array
(
    [BASE_PRICE] => Array
        (
            [APPLE] => 7.5
            [ORANGE] => 0
            [BANANA] => 0
            [LIME] => 0
        )

    [MARKUP] => Array
        (
            [APPLE] => 1.2
            [ORANGE] => 4
            [BANANA] => 6
            [LIME] => 8
        )

)

【讨论】:

  • 太棒了!谢谢你。如何按值降序排列数组?
  • 您可以为此使用rsort()
  • @ari1999 如果对您有帮助,请您接受这个答案吗?
【解决方案2】:

你可以使用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));

【讨论】:

  • 好答案@GNassro :)
【解决方案3】:

你可以通过下一个方式使用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);
?>

【讨论】:

    猜你喜欢
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 2020-01-07
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    相关资源
    最近更新 更多