php - 如何在 PHP 7 中使用子数组键值对关联数组进行排序
问题描述
我想使用关联数组中的子数组键对关联数组进行升序排序。
以下是我的数组。
Array
(
[0] => Array
(
[weight] => 5.6
[item_id] => wQsK0EpTSkAAAAFvOVohK1wK
[item_reference] => M-AAH-960
[tracking_details] => Array
(
[article_id] => G4KZ00002482EXP00007
[consignment_id] => G4KZ00002482
[barcode_id] => G4KZ00002482EXP00007
)
[product_id] => exp
)
[1] => Array
(
[weight] => 19.2
[item_id] => wQsK0EpTSkAAAAFvOVohK1wK
[item_reference] => M-AAH-960
[tracking_details] => Array
(
[article_id] => G4KZ00002482EXP00002
[consignment_id] => G4KZ00002482
[barcode_id] => G4KZ00002482EXP00002
)
[product_id] => exp
)
[2] => Array
(
[weight] => 18.5
[item_id] => wQsK0EpTSkAAAAFvOVohK1wK
[item_reference] => M-AAH-960
[tracking_details] => Array
(
[article_id] => G4KZ00002482EXP00003
[consignment_id] => G4KZ00002482
[barcode_id] => G4KZ00002482EXP00003
)
[product_id] => exp
)
[3] => Array
(
[weight] => 19.3
[item_id] => wQsK0EpTSkAAAAFvOVohK1wK
[item_reference] => M-AAH-960
[tracking_details] => Array
(
[article_id] => G4KZ00002482EXP00006
[consignment_id] => G4KZ00002482
[barcode_id] => G4KZ00002482EXP00006
)
[product_id] => exp
)
)
我想要article_id
使用循环升序排列的值。
输出将使用升序..
article_id G4KZ00002482EXP00002
weight 19.2
article_id G4KZ00002482EXP00003
weight 18.5
article_id G4KZ00002482EXP00006
weight 19.3
article_id G4KZ00002482EXP00007
weight 5.6
我使用了以下脚本,但没有给出正确的结果,它返回错误。
$result = array(
array('weight'=>5.6, 'item_id'=>'wQsK0EpTSkAAAAFvOVohK1wK','item_reference'=>'M-AAH-960',
'tracking_details'=>array('article_id'=>'G4KZ00002482EXP00007','consignment_id'=>'G4KZ00002482','barcode_id'=>'G4KZ00002482EXP00007'),
'product_id'=>'exp'
),
array('weight'=>19.2, 'item_id'=>'wQsK0EpTSkAAAAFvOVohK1wK','item_reference'=>'M-AAH-960',
'tracking_details'=>array('article_id'=>'G4KZ00002482EXP00002','consignment_id'=>'G4KZ00002482','barcode_id'=>'G4KZ00002482EXP00002'),
'product_id'=>'exp'
),
array('weight'=>18.5, 'item_id'=>'wQsK0EpTSkAAAAFvOVohK1wK','item_reference'=>'M-AAH-960',
'tracking_details'=>array('article_id'=>'G4KZ00002482EXP00003','consignment_id'=>'G4KZ00002482','barcode_id'=>'G4KZ00002482EXP00003'),
'product_id'=>'exp'
),
array('weight'=>19.3, 'item_id'=>'wQsK0EpTSkAAAAFvOVohK1wK','item_reference'=>'M-AAH-960',
'tracking_details'=>array('article_id'=>'G4KZ00002482EXP00006','consignment_id'=>'G4KZ00002482','barcode_id'=>'G4KZ00002482EXP00006'),
'product_id'=>'exp'
),
);
foreach ($result as $key => $value) {
echo $output = sort(array_column($result, 'article_id'));
}
解决方案
我创建了一个实现,它提供了你想要的输出
usort($result, function ( $a, $b) {
return ($a['tracking_details']['article_id'] <=> $b['tracking_details']['article_id']);
});
foreach($result as $item) {
print($item['tracking_details']['article_id'].PHP_EOL);
print($item['weight'].PHP_EOL);
print(PHP_EOL);
}
这使用 usort 和<=>
比较文章 ID-s。
推荐阅读
- json - 使用 jq 循环一个 json 文件
- android - NestedScrollView 内的 NestedScrollView 不滚动
- glsl - 如何避免关于未使用的顶点输入的验证层错误?
- javascript - 如何在 .map 中创建的一堆其他下拉列表中仅触发一个下拉列表
- node.js - 测量用户使用 nodejs 下载图像需要多长时间
- java - 在不保留 gradlew 文件的情况下部署在 heroku 上
- python - 像普通列一样访问 Pandas 索引
- c++ - 矩阵类的转置方法
- php - 将 WooCommerce 商店复制到暂存(删除订单)
- asp.net-mvc - 新用户注册/密码更改后强制注销