PHP-按子数组中的值对数组进行排序-DESC和ASC

时间:2018-07-07 13:41:00

标签: php arrays sorting

我需要按子数组中的值对数组进行排序。我必须在两个选项中进行此操作-desc排序和asc排序(因此我需要在函数中定义此参数)。

这是我的数组:

$query2 = $mysqli->query("SELECT * FROM bsi_roomtype WHERE roomtype_id != ".$_GET['roomid']." ");

我想按array(5) { [0]=> array(2) { ["client_type"]=> string(5) "buyer" ["id"]=> string(3) "196" } [1]=> array(2) { ["client_type"]=> string(16) "seller" ["id"]=> string(3) "206" } [2]=> array(2) { ["client_type"]=> string(16) "buyer" ["id"]=> string(3) "206" } [3]=> array(2) { ["client_type"]=> string(16) "seller" ["id"]=> string(3) "206" } [4]=> array(2) { ["client_type"]=> string(16) "buyer_and_seller" ["id"]=> string(3) "206" } } 数组键(asc和desc)对该数组排序。我该怎么办?我检查了以下答案:PHP Sort Array By SubArray Value,但不能解决我的问题。

谢谢。

3 个答案:

答案 0 :(得分:2)

您链接到的答案会告诉您您到底需要做什么,不是吗?我唯一要补充的是,您可能会喜欢strnatcmp函数来比较字符串而不是数字。因此,您将拥有:

function cmp_by_clientType($a, $b) {
  return strnatcmp($a["client_type"], $b["client_type"]);
}

usort($array, "cmp_by_clientType");

当您说链接到的答案不起作用时,您遇到的问题是什么?

编辑

对于asc和desc,最简单的是具有两个排序函数,因此对于DESC,您将具有相同的函数,但是您将$ a和$ b交换了:

function cmp_by_clientType_DESC($a, $b) {
  return strnatcmp($b["client_type"], $a["client_type"]);
}

如果发现这种不雅观,则可以将布尔值传递给compare函数,但这比较棘手。您可以在这里阅读更多内容:

Pass extra parameters to usort callback

答案 1 :(得分:2)

在您尝试的示例中,他们使用数字进行比较和排序。

client_type是一个字符串,您可以使用strcmp比较字符串。

对于ASC:

$arr = //Your array
usort($arr, function($a, $b){
    return strcmp( $a['client_type'], $b['client_type'] );
});

对于DESC:

$arr = //Your array
usort($arr, function($a, $b){
    return strcmp( $b['client_type'], $a['client_type'] );
});

答案 2 :(得分:0)

您必须使用./dira/dirb/applefiltered.gff php函数。 文档的链接位于:http://php.net/manual/en/function.usort.php 基本上,它是这样的: 您创建一个描述逻辑的方法,该逻辑用来对数组进行排序,然后在usort()方法中将该方法作为回调来调用。

赞:     请记住,您可以使用usort()来汇总数据:

array_sum() , or array_max()

希望这对您有所帮助。

基督徒