我有以下数组,我需要按名称([0])和平台([2])
排序Array
(
[0] => Array
(
[0] => Assassins Creed: Syndicate
[1] => 199
[2] => PC
[3] => 1
)
[1] => Array
(
[0] => Assassins Creed: Syndicate
[1] => 199
[2] => XONE
[3] => 1
)
[2] => Array
(
[0] => Assassins Creed: Syndicate
[1] => 199
[2] => PC
[3] => 1
)
)
我已经有了usort函数,它按名称对数组进行排序,但我不知道如何通过平台对它进行排序(以便xbox位于最后一个位置)。
function sort_by_name($a, $b) {
if ($a == $b)
return 0;
return ($a[0] < $b[0]) ? -1 : 1;
}
我想将数组排序如下:
Array
(
[0] => Array
(
[0] => Assassins Creed: Syndicate
[1] => 199
[2] => PC
[3] => 1
)
[1] => Array
(
[0] => Assassins Creed: Syndicate
[1] => 199
[2] => PC
[3] => 1
)
[2] => Array
(
[0] => Assassins Creed: Syndicate
[1] => 199
[2] => XONE
[3] => 1
)
)
非常感谢您的帮助。
答案 0 :(得分:2)
您可以像{/ p>一样使用usort
功能
usort($arr, function($a,$b){
$c = strcmp($a[0],$b[0]);
$c .= strcmp($a[2],$b[2]);
return $c;
});
答案 1 :(得分:0)
看一下array_multisort()
简而言之,您从要排序的值构建两个数组并将它们传递给array_multi_sort()
答案 2 :(得分:0)
我认为你想要先按标题排序然后按平台排序? (您的示例具有相同的标题,因此不清楚)
从逻辑上讲,这与通过包含标题和平台的一个长短语对其进行排序没有什么不同,因此您应该能够通过它们的串联对其进行排序。
function sort_by_name($a, $b) {
if ($a == $b)
return 0;
return (($a[0] . $a[2]) < ($b[0] . $b[2])) ? -1 : 1;
}
当然,这取决于每个实例中拼写的标题完全相同(包括空格,大小写等)但你有任何类型的那个
答案 3 :(得分:0)
$sort = array();
foreach($YOUR_ARRAY as $k=>$v) {
$sort[0][$k] = $v[0];
$sort[2][$k] = $v[2];
}
array_multisort($sort['0'], SORT_DESC, $sort[2], SORT_ASC, $YOUR_ARRAY);