我在PHP中有一个从SQL查询创建的关联array.我一直只按一列排序,但现在我需要将代码更改为按两列排序.

这两列由一个浮点数和一个字符串组成: $array["FinalValue"] = float$array["Category"] = string

我现在使用它来按一个浮点型列(FinalMultiple)进行排序:

usort($categorylist, function($a, $b){
   if((float) $b['FinalMulti'] == (float) $a['FinalMulti']) return 0;
   return ((float) $b['FinalMulti'] < (float) $a['FinalMulti']) ? - 1 : 1;
});

我在网站上搜索了如何做到这一点,发现了一个按字符串和整数排序的示例,但没有完全按照我的顺序排序,也没有构建在我当前使用的代码上.

其他的例子使用了strcmp,我把它插入了几个地方,但它不起作用.例如,我try 过:

usort($categorylist, function($a, $b){
   if((float) $b['FinalMulti'] == (float) $a['FinalMulti']) {
      return strcmp($b['CategoryName'], $a['CategoryName']);
   }
   
   return ((float) $b['FinalMulti'] < (float) $a['FinalMulti']) ? - 1 : 1;
});

我知道strcmp比较字符串,所以我觉得应该有一个if语句,但我不知道return会是什么.虽然我很擅长编程,但我对usort的理解并不是很强.

最后,["FinalMulti"]需要从最高到最低的DESC排序,而["CategoryName"]需要按字母顺序(A到Z)排序.所有["CategoryName"]个字符串中的第一个字母都大写.

提前谢谢!

推荐答案

您可以将array_multisortarray_column一起使用:

array_multisort(
  array_column($categorylist, 'FinalMulti'), SORT_DESC, 
  array_column($categorylist, 'CategoryName'), SORT_ASC, 
  $categorylist
);

100

Php相关问答推荐

无法使用PHP DomDocument找到IMG元素

在php中有没有办法比较两个包含相同枚举类型的枚举数组

Laravel数据表在一个视图中传递两个实例

使用正则表达式搜索两个子字符串(没有重叠/共享字符)

为什么正则表达式与得到的文本块之前得到的也行?

根据未用于变体的产品属性隐藏WooCommerce发货方式

从订单项目中获取ACF WooCommerce产品价值

筛选器具有多个查询之一

未收到Strava WebHook事件数据

dyld[45923]:未加载库:/usr/local/opt/libavif/lib/libavif.15dylib

如何使用 PHP 创建简化的 twig 替换?

如何使用 AJAX、PHP 和 MYSQL 在 Select 项目时在文本框中填充数据

invalid_grant 和无效的 JWT 签名

使用动态地址和动态文件创建zip文件并获取zip文件链接

无法读取某些 WordPress 主机上的 cookie

如何在PHP中对多个脚本调用进行排队?

Laravel:ArgumentCountError: 函数 App\Mail 的参数太少

PHP 中的 curl 验证失败(openssh 连接正常)

构建 [Controller] 时目标 [Interface] 不可实例化

标头内容类型:image/jpeg 无效