2011-04-25 45 views
3

我有以下阵列:按子键日期排序多维数组?

[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日“的项目应该被归类为这样)。

任何想法,我怎么会去这注意,“日期”字段的形式存储在数据库 - 这是不是从日期()转换时间戳;?!或任何

非常感谢

回答

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; 
} 
+0

这完全合理;万分感谢!这就是说 - 我仍然遇到问题。在上面的例子中,我只有一个数组键(I.e.,第一个元素)的数字,但实际上,数组键是柱子的子弹(即随机字符串)。运行usort后,数组键被转换为数字。有什么办法呢? – aendrew 2011-05-04 00:51:55

+1

没关系! uasort();代替usort();做的伎俩。谢谢,并为延迟接受这个答案表示歉意! – aendrew 2011-05-04 00:53:30

2

使用@EmilVikström液,用的strtotime作为比较功能

功能date_sort($ A,$ B){

$ a =的strtotime ($一个[ '日期']); $ b = strtotime($ b ['date']);

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

}

usort($ array,'date_sort');

http://fr2.php.net/manual/en/function.strtotime.php应该处理大部分用英文写成的文本日期。

+0

strtotime不处理这种格式,但我已经用一个将原始格式转换为strtotime可以理解的函数更新了我的答案。 – 2011-04-25 10:18:06

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为按时间排序到每个组

0

试试这个

$ arrArray有你有数组规定;

$newArray = array(); 
foreach($arrArray as $key => $value){ 

    $date1 = substr($value['date'], 0, strpos($value['date'],'@')-1); 
    $newArray[$date1][] = $value; 


} 
print_r($newArray);