将数组元素替换为最后一个非零值

时间:2013-02-28 05:50:21

标签: php arrays multidimensional-array

我有一个如下结果数组:

Array
(
    [2013-02-27] => Array
        (
            [CPD] => 0
            [Display] => 0
            [Incent] => 0
            [Organic] => 1464
            [uncategorized] => 0
            [total] => 0
        )

    [2013-02-26] => Array
        (
            [CPD] => 0
            [Display] => 0
            [Incent] => 0
            [Organic] => 1463
            [uncategorized] => 0
            [total] => 0
        )

    [2013-02-25] => Array
        (
            [CPD] => 0
            [Display] => 0
            [Incent] => 0
            [Organic] => 1459
            [uncategorized] => 0
            [total] => 0
        )

    [2013-02-24] => Array
        (
            [CPD] => 0
            [Display] => 2
            [Incent] => 0
            [Organic] => 1449
            [uncategorized] => 0
            [total] => 0
        )

这基本上是一个运行的总和,我需要将零值替换为更高的值,如果有的话。我的意思是我有2个作为2013-02-24显示的计数。所以我需要将其作为显示类别的其他日期的计数。为了使事情更清楚一点,这是产品的下载次数,而我每天都会从各种来源计算数量。因此,如果它的计数为2到24,那么如果当天的下载量为零,则必须与未来几天相同。如果下载再次发生,它会加起来。所以我正在做的是循环数组并检查零值。如果特定部分的值为零,例如显示,则必须替换为上一个日期中较高的数字(如果有)。那我怎么能这样做呢?

我使用了以下代码:

foreach ($result as $key=>$value){
            foreach($categories as $cat){
                if($value[$cat->category]==0){
          $prev_day = date("Y-m-d",strtotime ( '-1 day' , strtotime ( $key ) )) ;
          while ($prev_day>=$from) {
            if($result[$prev_day][$cat->category]!=0){
              $prev_high_value[$cat->category]=$result[$prev_day][$cat->category];
              break;
            }
            $prev_day = strtotime ( '-1 day' , strtotime ( $prev_day ) ) ;
          }
          $result[$key][$cat->category]=$prev_high_value[$cat->category];
            }
        }
    }

其中$ category是一个对象,其类别值如显示其他

0 个答案:

没有答案