按两个字符串

时间:2016-02-02 10:14:37

标签: php arrays sorting multidimensional-array

我有以下数组,我需要按名称([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
)
)

非常感谢您的帮助。

4 个答案:

答案 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)

您需要array_multisort

$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);