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