我是php的新手,我觉得这种语言有一些非常好的数组排序功能
下面有一个输入数组,其中包含书籍,读者和价格
$input[]=array("Harrypotter","John",50);
$input[]=array("Twilight","John",60);
$input[]=array("Harrypotter","Jack",80);
$input[]=array("Gonegirl","marion",90);
$input[]=array("Gonegirl","test",90);
$input[]=array("Gonegirl","John",90);
$input[]=array("Gonegirl","eliza",90);
我想在第一个字段上对数组进行排序,使得重复次数较多的书应该先出现,预期的O / p就是这样的
$input[]=array("Gonegirl","marion",90);
$input[]=array("Gonegirl","test",90);
$input[]=array("Gonegirl","John",90);
$input[]=array("Gonegirl","eliza",90);
$input[]=array("Harrypotter","Jack",80);
$input[]=array("Harrypotter","John",50);
$input[]=array("Twilight","John",60);
我能够复制单独数组中的第一个字段并使用 array_count_values 来获取事件,并且我能够通过 array_multi_sort 获得预期输出但是它只按第一个字段的字母顺序排序。
任何有效的解决方案都会有所帮助!
答案 0 :(得分:1)
这应该适合你:
<?php
$input = array();
$input[]=array("Harrypotter","John",50);
$input[]=array("Twilight","John",60);
$input[]=array("Harrypotter","Jack",80);
$input[]=array("Gonegirl","marion",90);
$input[]=array("Gonegirl","test",90);
$input[]=array("Gonegirl","John",90);
$input[]=array("Gonegirl","eliza",90);
function cmp($a, $b) {
return strcmp($a[0], $b[0]);
}
usort($input, "cmp");
print_r($input);
?>
答案 1 :(得分:1)
首先必须建立每个值出现频率的计数,然后你可以编写一个按这些值排序的比较函数:
$counts = array_count_values(array_map('current', $input));
usort($input, function (array $a, array $b) use ($counts) {
return $counts[$b[0]] - $counts[$a[0]];
});
答案 2 :(得分:0)
array_multisort(array_map('count', $input), SORT_DESC, $input);
PS:来自PHP Sort a multidimensional array by number of items
<强>更新强>:
array_multisort(array_map(function ($fld) {return $fld[0];}, $input), SORT_ASC, $input);