比较多个不同的日期并获得PHP的平均值

时间:2010-12-27 14:13:50

标签: php arrays

我使用一个名为count_days($date1,$date2)的函数来计算两个日期之间的天数。但是,我的问题是:日期来自数据库,如下所示:

Array (
  [imac] => Array (
    [0] => 2002-10-10
    [1] => 2003-11-22
    [3] => 2004-11-10
  )
  [iphone] => Array (
    [0] => 2007-09-11
    [1] => 2008-05-12
    [2] => 2009-06-14
    [3] => 2010-06-05
  )
)

正如您所看到的,产品可能具有不同数量的子阵列。我想计算第一个和下一个日期之间的日期(依此类推!),然后得到平均天数。

2 个答案:

答案 0 :(得分:1)

DateInterval类非常适合这种日期算术。您可以使用DateTime :: add,DateTime :: subtract和DateTime :: diff来处理它们。

<?php

$types = array(
    'imac' => array ('2002-10-10', '2003-11-22', '2004-11-10'),
    'iphone' => array ( '2007-09-11', '2008-05-12', '2009-06-14', '2010-06-05'),
);

$typeIntervals = array();
$typeAverage = array();
foreach ($types as $type=>$dates) {
    $last = null;
    $typeIntervals[$type] = array();
    foreach ($dates as $date) {
        $current = new DateTime($date);
        if ($last) {
            $interval = $current->diff($last);
            $typeIntervals[$type][] = $interval->days;
        }
        $last = $current;
    }
    $typeAverage[$type] = array_sum($typeIntervals[$type]) / count($typeIntervals[$type]);
}

print_r(typeIntervals);
print_r($typeAverage);

这将输出:

Array (
    [imac] => Array (
            [0] => 408
            [1] => 354
        )
    [iphone] => Array (
            [0] => 244
            [1] => 398
            [2] => 356
        )
)
Array (
    [imac] => 381
    [iphone] => 332.66666666667
)

答案 1 :(得分:0)

尝试这样的smth(未经测试)

$lastDate = $dbArray[0][0];
    $daysArray = array();
    foreach ( $dbArray as $value )
    {
        if ( is_array($value) )
        {
            foreach ( $value as $v )
            {
                $daysArray[] = count_days($lastDate, $v);
                $lastDate = $v;
            }
        } else {
            //not an array check if it's a date and test it here
        }
    }
    $average = array_sum($daysArray)/count($daysArray);