按子键日期对多维数组排序



我有以下数组:

[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日"应该这样分组)。

你知道我该怎么做吗?请注意,"date"字段在DB中是这样存储的——它不是从date()转换过来的时间戳;等等。

多谢!

创建自己的排序函数,并使用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;
}

使用@Emil Vikström解决方案,使用strtotime作为比较函数

function date_sort($a, $b) {

$a = strtotime($a['date']);$b = strtotime($b['date']);

return ($a == $b) ?0: $a>$b ?- 1: 1);

}

usort($数组,date_sort);

http://fr2.php.net/manual/en/function.strtotime.php应该处理大多数英文文本日期

试试这个

$arrArray有你指定的数组;

$newArray = array();
foreach($arrArray as $key => $value){
    $date1 = substr($value['date'], 0, strpos($value['date'],'@')-1);
    $newArray[$date1][] = $value;

}
print_r($newArray);

按照日期分组数据,运行这个小循环

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

您可以使用ussort按时间对每个组进行排序

相关内容

  • 没有找到相关文章

最新更新