按时间创建和排序新数组

时间:2011-07-13 16:28:52

标签: php arrays sorting

我有一个与此类似的数组

Array
(
    [0] => Array
        (
            [showname] => White Collar
            [air_time] => 1310590800
        )

    [1] => Array
        (
            [showname] => Chopped
            [air_time] => 1310590800
        )

    [2] => Array
        (
            [showname] => Covert Affairs
            [air_time] => 1310587200
        )
    } ... etc

我想要创建一个按air_time排序的新数组。例如,包含相同air_time的所有节目应该在[0]然后[1]然后[2]等。

我希望输出的一个例子是:

Array
(
    [0] => Array
        (
            [time] => 1310590800
            [shows] => Array
                (
                    [name] => White Collar
                    [name] => Chopped
                )

        )

    [1] => Array
        (
            [time] => 1310587200
            [shows] => Array
                (
                    [name] => Covert Affairs
                )

        )
}

我一直在寻找不同的数组方法,例如multisort,但我无法弄明白。

你能指出我正确的方向吗?感谢

更新我知道如何按时间正常排序数组,我只是不知道如何分离和分组具有相同时间的元素

2 个答案:

答案 0 :(得分:1)

尝试使用usort。提供的链接有几个工作示例。

答案 1 :(得分:0)

如果你把头包住它并不难。顺便说一下,你不能有多个具有相同键名的数组元素。

$shows = array(
    array(
        'showname' => 'White Collar',
        'air_time' => 1310590800
    ),
    array(
        'showname' => 'Covert Affairs',
        'air_time' => 1310587200
    ),
    array(
        'showname' => 'Chopped',
        'air_time' => 1310590800
    )
);

/* Sort by air_time (descending) */
usort($shows, function ($a, $b) {
    return ($b['air_time'] - $a['air_time']);
});


/* Regroup array (utilizing the fact that the array is ordered) */
$regrouped = array();
$c = 0;
foreach ($shows as $show) {
    if ($c > 0 && $regrouped[$c - 1]['time'] === $show['air_time']) {
        $regrouped[$c - 1]['shows'][] = $show['showname'];
    } else {
        $regrouped[] = array('time'  => $show['air_time'],
                             'shows' => array($show['showname']));
        $c++;
    }
}

print_r($regrouped);