首先检查数组是否存在更新,否则推送

时间:2016-11-29 07:58:55

标签: php arrays

   for($j=0;$j<count($data);$j++)   {for($i = $begin; $begin <= $end; $i->modify('+1 day')){
            $totaldistance=0;
            $totalorder=0;
            for($j=0;$j<count($data);$j++)  {
                $unixtime_=$data[$j]['create_date'];
                $distance=$data[$j]['distance'];
                $distance=$data[$j]['distance'];
                //$orginal_time= substr($unixtime_,0,10);
                $start_date_orignal=date_format(date_create($unixtime_),'Y-m-d');
                //echo '<br>';
                if($i->format("Y-m-d") == $start_date_orignal){ 
                    $totaldistance=$totaldistance+$distance;
                    $totalorder=$totalorder+1;
                    $wholedata1[]=array('start_date_orignal'=>$start_date_orignal,'totaldistance'=>$totaldistance,'totalorder'=>$totalorder);
                    echo "<pre>";
                    echo $i->format("Y-m-d").'='.$start_date_orignal.'='.$totaldistance.'='.$totalorder;
                    echo "</pre>";
                     if(in_array($start_date_orignal,$wholedata)){
                        echo "sasa";
                    }else{
                        echo "1221";
                        array_push($wholedata,array('start_date_orignal'=>$start_date_orignal,'totaldistance'=>$totaldistance,'totalorder'=>$totalorder));
                    }   
                }

            }

        }

输出

 Array
    (
        [0] => Array
            (
                [start_date_orignal] => 2016-05-23
                [totaldistance] => 0
                [totalorder] => 1
            )

        [1] => Array
            (
                [start_date_orignal] => 2016-05-23
                [totaldistance] => 0
                [totalorder] => 2
            )

        [2] => Array
            (
                [start_date_orignal] => 2016-05-23
                [totaldistance] => 0
                [totalorder] => 3
            )

        [3] => Array
            (
                [start_date_orignal] => 2016-05-23
                [totaldistance] => 0
                [totalorder] => 4
            )

        [4] => Array
            (
                [start_date_orignal] => 2016-05-23
                [totaldistance] => 0
                [totalorder] => 5
            )

        [5] => Array
            (
                [start_date_orignal] => 2016-05-23
                [totaldistance] => 0
                [totalorder] => 6
            )

        [6] => Array
            (
                [start_date_orignal] => 2016-06-17
                [totaldistance] => 29.8
                [totalorder] => 1
            )

        [7] => Array
            (
                [start_date_orignal] => 2016-06-18
                [totaldistance] => 1
                [totalorder] => 1
            )

        [8] => Array
            (
                [start_date_orignal] => 2016-06-18
                [totaldistance] => 1
                [totalorder] => 2
            )

        [9] => Array
            (
                [start_date_orignal] => 2016-06-18
                [totaldistance] => 1
                [totalorder] => 3
            )

        [10] => Array
            (
                [start_date_orignal] => 2016-06-18
                [totaldistance] => 1
                [totalorder] => 4
            )

        [11] => Array
            (
                [start_date_orignal] => 2016-06-18
                [totaldistance] => 1.1
                [totalorder] => 5
            )

    )

所以我有一个结束和开始日期以及一个包含查询数据的数组数据。正如你可以看到我的输出我得到 start_date_orignal作为关键和他的价值2016-05-23 。我得到这个值5次,所以我希望当相同的日期已经存在时,它将更新该特定日期的totalorder和totalcount。所以任何人都可以帮助我

1 个答案:

答案 0 :(得分:0)

正如评论中所指出的:您可能希望在查询中包含此内容。既然你没有发布你的SQL我就不得不猜测,但它看起来像这样:

SELECT
start_date_original, SUM(totaldistance) as totaldistance, SUM(totalorder) as totalorder
FROM `table`
GROUP BY start_date_original

看看GROUP BY

  

GROUP BY语句与聚合一起使用   函数用于将结果集分组为一列或多列。

编辑:

但是如果你真的想在php循环中这样做,我会建议这样的事情:

<?php
function cmp( $a, $b ) {
    if ( $a['start_date_original'] == $b['start_date_original'] ) {
        return 0;
    }
    return ( $a['date'] < $b['date'] ) ? - 1 : 1;
}

usort( $data, "cmp" );

for ( $i = 0; $i < count( $data ); $i ++ ) {
    if ( $data[ $i ]['date'] !== $data[ $i + 1 ]['date'] ) {
        continue; # No duplicate.
    }

    # We found a duplicate, so we'll add the current items to the next one. Then unset this one.
    $data[ $i + 1 ]['totaldistance'] += $data[ $i ]['totaldistance'];
    $data[ $i + 1 ]['totalorder'] += $data[ $i ]['totalorder'];

    unset($data[$i]);
}

我们在这里做两件事:

  1. 按日期对数组排序。
  2. 总和重复 - 现在可以方便地彼此相邻。
  3. 您的数组可能已在日期对结果进行排序,如果是这种情况,您可以删除usort()

    我仍然认为在你的查询中总结是一个更好的主意。