Манипулирование массивом php - PullRequest
0 голосов
/ 29 марта 2012

Привет, ребята, у меня есть массив, который заполнен датами

Array
(
    [0] => 2012-04-04
    [1] => 2012-04-06
    [2] => 2012-04-06
    [3] => 2012-04-06
    [4] => 2012-04-06
    [5] => 2012-04-06
    [6] => 2012-04-06
    [7] => 2012-04-11
    [8] => 2012-04-12
    [9] => 2012-04-12
    [10] => 2012-04-13
    [11] => 2012-04-13
    [12] => 2012-04-13
    [13] => 2012-04-13
    [14] => 2012-04-13
    [15] => 2012-04-13
    [16] => 2012-04-13
)

Как бы я прошел по массиву и нашел бы разницу в днях между элементами рядом друг с другом в массиве.Например, я бы хотел вывести

разницу между [0] и [1], равную "2" дням, разницу между [1] и [2], "0" дней

:)

Удалось получить вывод из верхнего ответа, однако я хочу, чтобы он отображался только при наличии разницы в дате.

Не выводится из этого оператора if, хотя - ОБНОВЛЕНО -

$count = count($datestack);



for ($i = 0; $i < $count - 1; $i++) {
    $datetime1 = new DateTime($datestack[$i]);
    $datetime2 = new DateTime($datestack[$i + 1]);
    $interval = $datetime1->diff($datetime2);
    if ($arr[$i] === $arr[$i+1]){
     echo $interval->format('%R%a days');
    }

} 

Ответы [ 3 ]

3 голосов
/ 29 марта 2012

Что вам нужно, это DateTime :: diff .

Пример:

$datetime1 = new DateTime('2012-04-04');
$datetime2 = new DateTime('2012-04-06');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%R%a days');

И вам просто нужно зациклить ваш массив, чтобы делать то, что вы хотите.

$count = count($arr);
for ($i = 0; $i < $count - 1; $i++) {
    $datetime1 = new DateTime($arr[$i]);
    $datetime2 = new DateTime($arr[$i + 1]);
    $interval = $datetime1->diff($datetime2);
    echo $interval->format('%R%a days');
} 
0 голосов
/ 29 марта 2012
<?php 
    $dates = array(
        '2012-04-04',
        '2012-04-06',
        '2012-04-06',
        '2012-04-06',
        '2012-04-06',
        '2012-04-06',
        '2012-04-06',
        '2012-04-11',
        '2012-04-12',
        '2012-04-12',
        '2012-04-13',
        '2012-04-13',
        '2012-04-13',
        '2012-04-13',
        '2012-04-13',
        '2012-04-13',
        '2012-04-13'
   );

   array_walk($dates, function($item, $key) {
        static $previous = null;
        if ($previous != null) {
            $datetime1 = new DateTime($previous);
            $datetime2 = new DateTime($item);
            $interval = $datetime1->diff($datetime2);
            echo $interval->format('%R%a days') . "\n";
        } 
        $previous = $item;
   }); 

?>   
0 голосов
/ 29 марта 2012

Как это?

     foreach($input as $k=>$i){ if(empty($input[$k-1])) continue; echo "<br /> difference between [".($k-1)."] and [".$k."] is ".'"'.round(abs(strtotime($i)-strtotime($input[$k-1]))/(3600*24)).'"'." days "; };
...