如何在PHP中按照另一个数组对数组进行排序?

时间:2016-03-11 05:08:41

标签: php arrays sorting

我有类似的数组:

Array(
       [06:30 PM] => 2
       [03:00 AM] => 3
       [08:00 PM] => 4
     )

所以我使用uksort对键进行排序,数组的排序方式如下:

Array(
        [03:00 AM] => 3
        [06:30 PM] => 2
        [08:00 PM] => 4
 )

我使用的代码是:

uksort($arr, function($a, $b) {
            return (strtotime(date('H:i',strtotime($a))) > strtotime(date('H:i',strtotime($b))));
        });

这个数组在Key中有时间,值的数量为value。现在,我有另一个数组,其中包含上述键的值。

Array
        (
            [1] => Array
                (
                    [0] => Default
                    [1] => BHU
                )

            [2] => Array
                (
                    [0] => Default
                    [1] => HOT
                    [2] => COLD
                )

            [3] => Array
                (
                    [0] => Default
                    [1] => Test
                    [2] => Test1
                    [3] => Test2
                )
        )

现在,我想按照上面排列的数组对这个数组进行排序。我怎么能这样做?

由于

2 个答案:

答案 0 :(得分:1)

首先,您编写的代码可以简化为

uksort($arr, function($a, $b) {
    return ( strtotime($a) > strtotime($b) );
});

对于答案,为数组结构制作代码会很麻烦。

我建议制作以下结构,然后使用您编写的代码进行排序,但我所显示的改进很少。

检查以下内容,

Array
        (
            [06:30 PM] => Array
                (
                    [0] => Default
                    [1] => BHU
                )

            [03:00 AM] => Array
                (
                    [0] => Default
                    [1] => HOT
                    [2] => COLD
                )

            [08:00 PM] => Array
                (
                    [0] => Default
                    [1] => Test
                    [2] => Test1
                    [3] => Test2
                )
        )

答案 1 :(得分:1)

<?php

$arr = array(
       '06:30 PM' => 2,
       '03:00 AM' => 3,
       '08:00 PM' => 4,
     );

$arr2 = array(
            '1' => array(
                    '0' => 'Default',
                    '1' => 'BHU'
                ),

            '2' => array(
                    '0' => 'Default',
                    '1' => 'HOT',
                    '2' => 'COLD',
                ),

            '3' => array(
                    '0' => 'Default',
                    '1' => 'Test',
                    '2' => 'Test1',
                    '3' => 'Test2',
                ),
        );

$arr3 = array_combine(array_keys($arr), $arr2);

uksort($arr3, function($a, $b) {
            return (strtotime(date('H:i',strtotime($a))) > strtotime(date('H:i',strtotime($b))));
        });

echo"<pre>";
print_r($arr3);   
?>

这个例子首先在你的第一个数组中使用array_keys,它将把你的键作为值,然后将它与你的另一个数组合并,你将在array_combine中使用array_combine它将获得第一个数组值作为键,第二个数组值为值和按键排序数组 有关详细信息,请参阅以下链接:

http://php.net/manual/en/function.array-combine.php

http://php.net/manual/en/function.array-keys.php