Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-按子数组中的值对数组排序-DESC和ASC_Php_Arrays_Sorting - Fatal编程技术网

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

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"]=>

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

这是我的阵列:

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排序?为您编辑了我的答案!工作正常。谢谢!工作正常。谢谢!工作正常。谢谢!