我有以下数组:
[0] => Array
(
[name] => The Name
[description] => description
[date] => Thur, May 5 @ 7:00 p.m.
[rating] => PG
[year] => 2011
)
[1] => Array
(
[name] => Name 2
[description] => description 2
[date] => Sun, May 8 @ 7:30 p.m.
[rating] => 14A
[year] => 2011
)
还有大约5-10个零件。
我最终想要做的是使用数组的日期部分按日分组这些项目(即,“所有带有”日期“的项目”落入“5月8日”应按此分组。)< / p>
知道我怎么回事吗?请注意,“日期”字段存储在DB中 - 这不是从date()转换的时间戳;或者其他什么。
非常感谢!
答案 0 :(得分:7)
创建您自己的排序功能,并使用usort调用它。
例如(不考虑时间戳格式的复杂性):
function date_sort($a, $b) {
return strcmp($a['date'], $b['date']); //only doing string comparison
}
usort($array, 'date_sort');
要完成date_sort,您需要将日期转换为可比类型。这是一个将它们转换为UNIX时间戳的解决方案:
function convert_date($time) {
$time = substr($time, strpos($time, ',')+1);
$time = str_replace('@', ',', $time);
$time = str_replace('.', '', $time);
return strtotime($time);
}
function date_sort($a, $b) {
$a = convert_date($a['date']);
$b = convert_date($b['date']);
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
答案 1 :(得分:2)
使用@EmilVikström解决方案,使用strtotime作为比较功能
function date_sort($ a,$ b){
$ a = strtotime($ a ['date']); $ b = strtotime($ b ['date']);
返回($ a == $ b)? 0 :( $ a> $ b? - 1:1);
}
usort($ array,'date_sort');
http://fr2.php.net/manual/en/function.strtotime.php应该处理用英语写的大多数文本日期。
答案 2 :(得分:0)
要按日期对数据进行分组,请运行此小循环
$sortedArray = array();
foreach($dataListing as $data){
//parse your $date field with an reg exp and transform it into integer with format MMDD
$sortedArray[$dateIntegerFormated][] = $data;
}
ksort($sortedArray);
$sortedArray = array_values($sortedArray);
您可以使用usort按时间分类到每个组
答案 3 :(得分:0)
试试这个
$ arrArray已指定数组;
$newArray = array();
foreach($arrArray as $key => $value){
$date1 = substr($value['date'], 0, strpos($value['date'],'@')-1);
$newArray[$date1][] = $value;
}
print_r($newArray);