我需要按子数组中的值对数组进行排序。我必须在两个选项中进行此操作-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,但不能解决我的问题。
谢谢。
答案 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函数,但这比较棘手。您可以在这里阅读更多内容:
答案 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()
希望这对您有所帮助。
基督徒