【问题标题】:Create and sort new array by time按时间创建和排序新数组
【发布时间】:2011-07-13 16:28:52
【问题描述】:

我有一个类似的数组

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
                )

        )
}

我一直在研究不同的数组方法,例如多排序,但我无法弄清楚。

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

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

【问题讨论】:

标签: php arrays sorting


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    如果你把头绕在它周围,这并不难。顺便说一句,你不能有多个具有相同键名的数组元素。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-26
      相关资源
      最近更新 更多