2010-07-19 90 views
1

所以我有此数组:复位数组元素

$dates[0] = array('start'=>'2010-07-22', 'end'=>'2010-07-23'); 
$dates[1] = array('start'=>'2010-07-22', 'end'=>'0000-00-00'); 
$dates[2] = array('start'=>'2010-07-29', 'end'=>'0000-00-00'); 
$dates[3] = array('start'=>'2010-07-31', 'end'=>'2010-07-31'); 
$dates[4] = array('start'=>'2010-07-08', 'end'=>'2010-07-31'); 
$dates[5] = array('start'=>'2010-08-01', 'end'=>'2010-09-30'); 
$dates[6] = array('start'=>'2010-07-18', 'end'=>'2010-08-15'); 
$dates[7] = array('start'=>'2010-07-01', 'end'=>'2010-08-31'); 

,我有以下条件: if an element 'start' is less then today, took the element's attribute 'end' and position the element relative to the others elements 'start'

所以如果一个事件started yesterdayends tomorrow它应该出现后,事件beginning today

因此产生的阵列是这样的:

$dates[3] = array('start'=>'2010-07-22', 'end'=>'2010-07-23'); 
$dates[4] = array('start'=>'2010-07-22', 'end'=>'0000-00-00'); 
$dates[5] = array('start'=>'2010-07-29', 'end'=>'0000-00-00'); 
$dates[6] = array('start'=>'2010-07-31', 'end'=>'2010-07-31'); 
$dates[1] = array('start'=>'2010-07-08', 'end'=>'2010-07-31'); 
$dates[7] = array('start'=>'2010-08-01', 'end'=>'2010-09-30'); 
$dates[2] = array('start'=>'2010-07-18', 'end'=>'2010-08-15'); 
$dates[0] = array('start'=>'2010-07-01', 'end'=>'2010-08-31'); 

我怎么能从样本输入到样本输出?

[编辑]

  1. 我试图改变EventList一个组件的输出为Joomla
  2. 我不是以英语为母语

所以,我会尽力再次:

如果事件开始日期比今天小,那么命令事件相对于this event enddateothers events startday

例:

如果事件在2010-07-01和完成“A”开始在2010-07-25和事件“B”开始于2010-07-24和当前日期是2010- 07-20事件'A'在事件'B'后发生

如果事件'A'在2010-07-20开始并于2010-07-25结束,事件'B'于2010-07-开始, 24并且当前日期是2010-07-20然后事件'B'在事件'A'后出现

我'希望'现在更清楚一点。

+0

我不太明白这个要求,但是研究输入和输出使我意识到,你只是按日期排序,并给予具有结束日期的人优先。 *闻到家庭作业* – yclian 2010-07-20 00:01:28

+0

@yclian:re:闻到作业。从今天看到大量php帖子来自相对较新的用户,我想你可能是对的。决赛时间?无论是那个还是PHP已经开始了它的“Testfest”。 – 2010-07-20 00:37:06

回答

1

嗯,所以如果我理解正确的话:按照stardate排序,如果> =今天,enddate如果开始日期< =今天。

function _myDateSorter($a,$b){ 
    $date = date('Y-m-d'); 
    $adate = ($a['start'] >= $date) ? $a['start'] : $a['end']; 
    $bdate = ($b['start'] >= $date) ? $b['start'] : $b['end']; 
    if($adate =='0000-00-00') $adate = '9999-99-99';//sort after it appears 
    if($bdate =='0000-00-00') $bdate = '9999-99-99';//sort after it appears 
    if($adate == $bdate) return 0; 
    return $adate > $bdate ? 1 : -1; 
} 

uasort($dates,'_myDateSorter'); 
+0

谢谢你,你的答案一直在无懈可击! – Cesar 2010-07-22 03:39:07