php - 使用宇宙飞船运算符按两个参数对数组进行排序
问题描述
有没有更紧凑的方法通过PHP ≥7.0的两个参数/字段对数组进行排序(使用太空船运算符<=>
)?
现在我只是要排序的技巧是首先按第二个参数,然后按第一个:
// Sort by second parameter title
usort($products, function ($a, $b) {
return $a['title'] <=> $b['title']; // string
});
// Sort by first parameter brand_order
usort($products, function ($a, $b) {
return $a['brand_order'] <=> $b['brand_order']; // numeric
});
这给了我想要的结果;产品首先按品牌订购,然后按名称订购。
我只是想知道他们是否是一种方法来做到这一点usort
。
这是我的问题作为代码片段。这个例子可以在这里测试。
<?php
<!-- Example array -->
$products = array();
$products[] = array("title" => "Title A",
"brand_name" => "Brand B",
"brand_order" => 1);
$products[] = array("title" => "Title C",
"brand_name" => "Brand A",
"brand_order" => 0);
$products[] = array("title" => "Title E",
"brand_name" => "Brand A",
"brand_order" => 0);
$products[] = array("title" => "Title D",
"brand_name" => "Brand B",
"brand_order" => 1);
// Sort by second parameter title
usort($products, function ($a, $b) {
return $a['title'] <=> $b['title']; // string
});
// Sort by first parameter brand_order
usort($products, function ($a, $b) {
return $a['brand_order'] <=> $b['brand_order']; // numeric
});
// Output
foreach( $products as $value ){
echo $value['brand_name']." — ".$value['title']."\n";
}
?>
解决方案
usort($products, function ($a, $b) {
if ( $a['brand_order'] == $b["brand_order"] ) { //brand_order are same
return $a['title'] <=> $b['title']; //sort by title
}
return $a['brand_order'] <=> $b['brand_order']; //else sort by brand_order
});
推荐阅读
- scala - sbt 程序集失败并出现错误:即使包含 spark-core 和 spark-sql 库,对象 spark 也不是包 org.apache 的成员
- android - JobIntentService 在某些设备中无法正常启动?
- php - 我如何使用 php 使用 curl 和 grante_type 进行身份验证
- sql - Postgresql - 查询将时间乘以数字
- elixir - ExUnit 使用 setup_all 块触发空错误
- bash - Tail -f 不显示最后一行
- javascript - 如何创建多个标签介绍画布
- sql - 具有空值的唯一约束被解释为任何值
- javascript - 数据库查询的实时过滤器
- node.js - 通过减少持续时间来加速查询