我希望做一些复杂的数组排序,但我不知道从哪里开始。内部数组有三个相关的排序键:第一年(数字ASC),然后是月份(数字ASC),最后是名称(字母DESC)。
<?php
// the current array:
$array = (
array('year'=>2012, 'month'=>3, 'name'=>'John', 'score'=>12),
array('year'=>2013, 'month'=>8, 'name'=>'Paul', 'score'=>3),
array('year'=>2013, 'month'=>5, 'name'=>'Dennis', 'score'=>7),
array('year'=>2012, 'month'=>3, 'name'=>'Paul', 'score'=>5),
array('year'=>2012, 'month'=>12, 'name'=>'Paul', 'score'=>9),
array('year'=>2012, 'month'=>9, 'name'=>'Mitt', 'score'=>3)
);
// I want to do some sorting with this as output:
$array = (
array('year'=>2012, 'month'=>3, 'name'=>'John', 'score'=>12),
array('year'=>2012, 'month'=>3, 'name'=>'Paul', 'score'=>5),
array('year'=>2012, 'month'=>9, 'name'=>'Mitt', 'score'=>3),
array('year'=>2012, 'month'=>12, 'name'=>'Paul', 'score'=>9),
array('year'=>2013, 'month'=>5, 'name'=>'Dennis', 'score'=>7),
array('year'=>2013, 'month'=>8, 'name'=>'Paul', 'score'=>3)
);
?>
如果有人能指出我真正受到赞赏的正确方向; - )。
答案 0 :(得分:3)
这应该有用......
<?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);
?>
来自:http://www.php.net/manual/en/function.array-multisort.php
编辑:对于PHP&lt; 5.5
<?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.
}
?>
答案 1 :(得分:1)
看看usort
。它接受一个回调,您可以在其中实现两个项目的自定义比较。除了usort
之外,还有uasort
和uksort
,它们接受回调,但在这种情况下,您需要usort
。
答案 2 :(得分:1)
你需要'array_multisort'功能。
它位于manual。