Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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中二维数组的数字和字母排序_Php_Arrays_Sorting_Multidimensional Array - Fatal编程技术网

PHP中二维数组的数字和字母排序

PHP中二维数组的数字和字母排序,php,arrays,sorting,multidimensional-array,Php,Arrays,Sorting,Multidimensional Array,我真的很努力,但未能按照我在PHP中想要的方式对我的二维数组进行排序 我有一个存储人名和年龄的数组,看起来像: $array[0][0]="Alex" $array[0][1]=38 $array[1][0]="Peggy" $array[1][1]=37 $array[2][0]="Ben" $array[2][1]=38 等等 我通过执行以下操作,按年龄对该数组进行了排序: usort($DATA, function($a, $b) { return $b[1] - $a[1];

我真的很努力,但未能按照我在PHP中想要的方式对我的二维数组进行排序

我有一个存储人名和年龄的数组,看起来像:

$array[0][0]="Alex"
$array[0][1]=38
$array[1][0]="Peggy"
$array[1][1]=37
$array[2][0]="Ben"
$array[2][1]=38
等等

我通过执行以下操作,按年龄对该数组进行了排序:

usort($DATA, function($a, $b) {
    return $b[1] - $a[1];
});
但我想添加另一层排序,按做排序,按字母顺序排序,即同龄的人。因此,首先,数组按年龄排序,然后如果一些年龄相同,则按字母顺序排序,将alex排在第一位,Ben排在第二位…

根据,“如果第一个参数被视为分别小于、等于或大于第二个参数,则比较函数必须返回小于、等于或大于零的整数。”因此,与其立即返回,不如检查差值是否为零,并采取相应措施:

<?php
$array = [["Alex",38], ["Peggy",37], ["Ben",38]];
usort($array, function($a, $b) {
    $diff = $b[1] - $a[1];
    if ($diff === 0) {
        $diff = strcmp($a[0], $b[0]);
    }
    return $diff;
});
print_r($array);
根据“如果第一个参数分别小于、等于或大于第二个参数,则比较函数必须返回一个小于、等于或大于零的整数。”因此,与其立即返回,不如检查差值是否为零,并相应地采取行动:

<?php
$array = [["Alex",38], ["Peggy",37], ["Ben",38]];
usort($array, function($a, $b) {
    $diff = $b[1] - $a[1];
    if ($diff === 0) {
        $diff = strcmp($a[0], $b[0]);
    }
    return $diff;
});
print_r($array);
您可以使用列并按列排序(使用以下命令提取列):

以下是。

您可以使用列并按列排序(使用以下命令提取列):


这是。

谢谢。它很有效。我遇到了一个大问题,因为我的“年龄”是一个浮点变量,而我的排序结果不正确。我已经将它们转换为整数,现在可以了。但我必须一步一步地理解为什么你的示例实际有效,为什么一旦插入到我的代码中,它就不……谢谢。它有效。我遇到了一个大问题,因为我的“年龄”不正确是一个浮点变量,我的排序结果不正确。我已将它们转换为整数,现在可以了。但我必须一步一步地理解为什么您的示例实际有效,以及为什么一旦插入我的代码,它就不是……有趣的方法,以前从未使用过
array\u column
。有趣的方法,从未使用
a请参阅前面的
列。
array_multisort(array_column($array, 1), array_column($array, 0), $array);