[英]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'
)
);
我想将grade
和price
的值合并到它自己的键值对中,让它看起来像这样:
$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.