Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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/xpath/2.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 - Fatal编程技术网

基于三个内部数组键值的php排序数组

基于三个内部数组键值的php排序数组,php,arrays,sorting,Php,Arrays,Sorting,我想做一些复杂的数组排序,但我不知道从哪里开始。内部数组有三个相关键用于排序:首先是年份(数字ASC),然后是月份(数字ASC),最后是名称(字母DESC) 如果有人能为我指出正确的方向,我会非常感激;-) 看一看。它接受一个回调,您可以在其中实现两个项的自定义比较。除了usort,还有uasort和uksort,它们接受回调,但在这种情况下,您需要查看usort。它接受一个回调,您可以在其中实现两个项的自定义比较。除了usort,还有uasort和uksort,它们接受回调,但在这种情况下

我想做一些复杂的数组排序,但我不知道从哪里开始。内部数组有三个相关键用于排序:首先是年份(数字ASC),然后是月份(数字ASC),最后是名称(字母DESC)


如果有人能为我指出正确的方向,我会非常感激;-)

看一看。它接受一个回调,您可以在其中实现两个项的自定义比较。除了
usort
,还有
uasort
uksort
,它们接受回调,但在这种情况下,您需要查看
usort
。它接受一个回调,您可以在其中实现两个项的自定义比较。除了
usort
,还有
uasort
uksort
,它们接受回调,但在这种情况下,您需要
usort
,这应该可以工作

<?php
    // Obtain a list of columns
    // PHP 5 >= 5.5.0
    $years  = array_column($array, 'year');
    $months = array_column($array, 'month');
    $names  = array_map('strtolower', array_column($array, 'name')); // because it's a string sort.

    // Sort the data with volume descending, edition ascending
    // Add $data as the last parameter, to sort by the common key
    array_multisort($years, SORT_ASC, $months, SORT_ASC, $names, SORT_DESC, $array);
?>

这应该可以

<?php
    // Obtain a list of columns
    // PHP 5 >= 5.5.0
    $years  = array_column($array, 'year');
    $months = array_column($array, 'month');
    $names  = array_map('strtolower', array_column($array, 'name')); // because it's a string sort.

    // Sort the data with volume descending, edition ascending
    // Add $data as the last parameter, to sort by the common key
    array_multisort($years, SORT_ASC, $months, SORT_ASC, $names, SORT_DESC, $array);
?>

您需要“数组\多排序”功能


它位于。

您需要“array\u multisort”函数


它在。

现在查看它,我想我可以从这里找到它!现在看看,我想我能从这里弄明白!这工作得很好,以前从未听说过array_multisort。谢谢,我会在几分钟内接受你的答案(如果允许的话)。如果你不确定第一个字母是否总是大写,也许你也应该在$names数组中使用map函数。($names_lowercase=array_map($strtolower',$names);)这只是用于array_multisort函数,并且不更改原始数组()您的意思是,如果没有您的建议,例如,小写的“a”排序在大写的“Z”后面吗?是的,我这样做。我编辑了源代码,您是否喜欢此版本;-)array_column()仅在PHP 5.5之后可用。使用
usort()
要好得多:这只是一个排序调用,唯一的变量是比较“what comes first”,它完全在另一个函数中编码。它更容易维护。您绝对必须使用
array\u multisort()
的情况非常罕见,这不是其中之一。这非常有效,以前从未听说过array\u multisort。谢谢,我会在几分钟内接受你的答案(如果允许的话)。如果你不确定第一个字母是否总是大写,也许你也应该在$names数组中使用map函数。($names_lowercase=array_map($strtolower',$names);)这只是用于array_multisort函数,并且不更改原始数组()您的意思是,如果没有您的建议,例如,小写的“a”排序在大写的“Z”后面吗?是的,我这样做。我编辑了源代码,您是否喜欢此版本;-)array_column()仅在PHP 5.5之后可用。使用
usort()
要好得多:这只是一个排序调用,唯一的变量是比较“what comes first”,它完全在另一个函数中编码。它更容易维护。绝对必须使用
array\u multisort()
的情况非常罕见,这不是其中之一。
<?php
    // Obtain a list of columns
    // PHP < 5.5.0
    foreach ($array as $key => $row) {
        $years[$key]  = $row['year'];
        $months[$key] = $row['month'];
        $names[$key]  = strtolower($row['name']); // because it's a string sort.
    }
?>