PHP-按子数组中的值对数组排序-DESC和ASC
我需要按子数组中的值对数组进行排序。我必须在两个选项中执行此操作-desc sort和asc sort(因此我需要在函数中定义此参数) 这是我的阵列:PHP-按子数组中的值对数组排序-DESC和ASC,php,arrays,sorting,Php,Arrays,Sorting,我需要按子数组中的值对数组进行排序。我必须在两个选项中执行此操作-desc sort和asc sort(因此我需要在函数中定义此参数) 这是我的阵列: array(5) { [0]=> array(2) { ["client_type"]=> string(5) "buyer" ["id"]=> string(3) "196" } [1]=> array(2) { ["client_type"]=>
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)对该数组进行排序。我怎么能做到?我检查了这个答案:但它不能解决我的问题
谢谢。您链接到的答案准确地告诉您需要做什么,不是吗?我要补充的唯一一点是,您可能会喜欢使用
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"]);
}
如果您发现这不雅观,您可以将一个布尔值传递给比较函数,但这更复杂。您可以在此处阅读更多内容:
您链接到的答案准确地告诉您需要做什么,不是吗?我要补充的唯一一点是,您可能会喜欢使用
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"]);
}
如果您发现这不雅观,您可以将一个布尔值传递给比较函数,但这更复杂。您可以在此处阅读更多内容:
在您尝试的示例中,他们使用数字进行比较和排序
client\u type
是一个字符串,您可以使用它来比较字符串
对于ASC:
$arr = //Your array
usort($arr, function($a, $b){
return strcmp( $a['client_type'], $b['client_type'] );
});
$arr = //Your array
usort($arr, function($a, $b){
return strcmp( $b['client_type'], $a['client_type'] );
});
对于描述:
$arr = //Your array
usort($arr, function($a, $b){
return strcmp( $a['client_type'], $b['client_type'] );
});
$arr = //Your array
usort($arr, function($a, $b){
return strcmp( $b['client_type'], $a['client_type'] );
});
在您尝试的示例中,他们使用数字进行比较和排序
client\u type
是一个字符串,您可以使用它来比较字符串
对于ASC:
$arr = //Your array
usort($arr, function($a, $b){
return strcmp( $a['client_type'], $b['client_type'] );
});
$arr = //Your array
usort($arr, function($a, $b){
return strcmp( $b['client_type'], $a['client_type'] );
});
对于描述:
$arr = //Your array
usort($arr, function($a, $b){
return strcmp( $a['client_type'], $b['client_type'] );
});
$arr = //Your array
usort($arr, function($a, $b){
return strcmp( $b['client_type'], $a['client_type'] );
});
您必须使用
usort()
php函数。
此处有指向文档的链接:
基本上,它是这样工作的:
创建一个方法,描述要对数组进行排序的逻辑,然后在usort()方法中将该方法作为回调调用
像这样:
请记住,您可以使用array\u sum()或array\u max()对数据求和。
:
函数排序($a,$b){
$suma=array_sum($a['score']);//或array_max
$sumb=array_sum($b['score']);//或array_max
如果($suma==$sumb){
返回0;
}
回报($suma<$sumb)?1:-1;
//或者只是:返回$suma$sumb;//从PHP7开始
usort($array,'sortArray');
希望这对你有帮助
Christian您必须使用
usort()
php函数。
此处有指向文档的链接:
基本上,它是这样工作的:
创建一个方法,描述要对数组进行排序的逻辑,然后在usort()方法中将该方法作为回调调用
像这样:
请记住,您可以使用array\u sum()或array\u max()对数据求和。
:
函数排序($a,$b){
$suma=array_sum($a['score']);//或array_max
$sumb=array_sum($b['score']);//或array_max
如果($suma==$sumb){
返回0;
}
回报($suma<$sumb)?1:-1;
//或者只是:返回$suma$sumb;//从PHP7开始
usort($array,'sortArray');
希望这对你有帮助
Christian但我如何定义对数组DESC或ASC排序?为您编辑了我的答案!工作正常。谢谢!但我如何定义对数组DESC或ASC排序?为您编辑了我的答案!工作正常。谢谢!工作正常。谢谢!工作正常。谢谢!