我有一个与此类似的数组
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,但我无法弄明白。
你能指出我正确的方向吗?感谢
更新我知道如何按时间正常排序数组,我只是不知道如何分离和分组具有相同时间的元素
答案 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);