繁体   English   中英

PHP - 如何将数组中的值更改为键值并对数据进行排序?

[英]PHP - How to change values in an array into a key value and sort the data?

我有这个数组:

$array_1 = array(
     array(
        'model' => 'iPhone 12',
        'grade' => 'A',
        'price' => '100'
     ),

     array(
        'model' => 'iPhone 12',
        'grade' => 'A',
        'price' => '95'
     ),

     array(
        'model' => 'iPhone 12',
        'grade' => 'B',
        'price' => '85'
     ),

     array(
        'model' => 'iPhone 12',
        'grade' => 'C',
        'price' => '75'
     )

  );

我想将gradeprice的值合并到它自己的键值对中,让它看起来像这样:

$array_2 = array(
     array(
        'model' => 'iPhone 12',
        'A' => '100'
     ),

     array(
        'model' => 'iPhone 12',
        'A' => '95'
     ),

     array(
        'model' => 'iPhone 12',
        'B' => '85'
     ),

     array(
        'model' => 'iPhone 12',
        'C' => '75'
     )

  );

然后,我想通过查看具有相似等级的 arrays 对数据进行排序,并仅保留价格最低的数组。 所以最后数组应该是这样的:

$array_3 = array(
     array(
        'model' => 'iPhone 12',
        'A' => '95'
     ),

     array(
        'model' => 'iPhone 12',
        'B' => '85'
     ),

     array(
        'model' => 'iPhone 12',
        'C' => '75'
     )

  );

我怎么能 go 关于这样做?

要在您的第二个数组中找到最低A价格,您必须先过滤掉具有这样一个键A的项目,只有在这一点上,您才真正知道您正在寻找 A 中的键A第一名...

如果您以相反的方式进行操作,这会更容易 - 过滤商品,以便仅保留价格最低的商品,然后将其转换为您想要的格式。

$array_2 = [];
foreach($array_1 as $element) {
    if(!isset($array_2[$element['grade']]) ||
       $array_2[$element['grade']]['price'] > $element['price']) {
        $array_2[$element['grade']] = $element;
    }
}

我们使用grade值作为新数组的- 当该键下尚未设置任何元素,或者设置的元素的价格高于我们正在循环的当前元素时,我们将该当前元素设置在该键下.

这导致

Array
(
    [A] => Array
        (
            [model] => iPhone 12
            [grade] => A
            [price] => 95
        )

    [B] => Array
        (
            [model] => iPhone 12
            [grade] => B
            [price] => 85
        )

    [C] => Array
        (
            [model] => iPhone 12
            [grade] => C
            [price] => 75
        )    
)

现在我们使用array_map将其转换为您想要的格式,包装到array_values以将我们的键重置为从零开始的数字索引:

$array_3 = array_values(array_map(
  function($e) {
    return ['model' => $e['model'], $e['grade'] => $e['price']];
  },
  $array_2)
);

array_map中,对于每个元素,我们返回一个新数组,该数组在同一键下具有model值,在键grade下具有元素,并且具有price的值。

结果:

Array
(
    [0] => Array
        (
            [model] => iPhone 12
            [A] => 95
        )

    [1] => Array
        (
            [model] => iPhone 12
            [B] => 85
        )

    [2] => Array
        (
            [model] => iPhone 12
            [C] => 75
        )
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM