2010-12-27 13 views
3

私はcount_days($date1,$date2)という関数を使って、2つの日付の間の日数を数えます。しかし、私の質問は:あなたはサブアレイの異なる数を有することができる製品を見ることができるように複数の異なる日付を比較し、平均をPHPで得る

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

:日付は次のように配列で、DBから来ます。
私は最初の日と次の日の間の日数をカウントしてから、日数の平均を求めます。このような

+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 
) 
0

トライなめらか(テストしていません)

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

x日付と[0]日付を比較したくありません。私は例として[1]を[0]、[2]を[1]と比較したい。 – Francesc