如果当前值为零,则将数组设置为前一个值 - php

时间:2016-06-16 11:41:21

标签: php arrays

我想替换值' 0'在具有前一个非零数字的数组值中。

数组的当前结构如下:

有人可以帮忙吗?

Array
(
    [2016-06-16] => -143
    [2016-06-17] => 0
    [2016-06-18] => 0
    [2016-06-19] => 0
    [2016-06-20] => -28
    [2016-06-21] => 517
    [2016-06-22] => 0
    [2016-06-23] => -218
    [2016-06-24] => 0
    [2016-06-25] => 27
    [2016-06-26] => 0
    [2016-06-27] => 0
    [2016-06-28] => 0
    [2016-06-29] => 0
    [2016-06-30] => -798
    [2016-07-01] => 0
    [2016-07-02] => 0
    [2016-07-03] => 0
    [2016-07-04] => 0
    [2016-07-05] => 0
    [2016-07-06] => 0
    [2016-07-07] => 0

)

预期结构

Array
    (
        [2016-06-16] => -143
        [2016-06-17] => -143
        [2016-06-18] => -143
        [2016-06-19] => -143
        [2016-06-20] => -28
        [2016-06-21] => 517
        [2016-06-22] => 517
        [2016-06-23] => -218
        [2016-06-24] => -218
        [2016-06-25] => 27
        [2016-06-26] => 27
        [2016-06-27] => 27
        [2016-06-28] => 27
        [2016-06-29] => 27
        [2016-06-30] => -798
        [2016-07-01] => -798
        [2016-07-02] => -798
        [2016-07-03] => -798
        [2016-07-04] => -798
        [2016-07-05] => -798
        [2016-07-06] => -798
        [2016-07-07] => -798

    )

我尝试使用下面的代码,但它显示错误,并且在更改时会更改最大值的第一个值。

        foreach ($jsonstatisticsData as $arrdata=> $val)
        {
            if($val==0){

    $prevarray=prev($jsonstatisticsData);
    $prev_value= $prevarray[$arrdata];
    $jsonstatisticsData[$arrdata]=$prev_value;

            }

        }

3 个答案:

答案 0 :(得分:1)

如果第一个不能0,那么请使用:

$prev = 0;
foreach ($jsonstatisticsData as $arrdata => $val) {
    if ($val == 0) {
        $jsonstatisticsData[$arrdata] = $prev;
    }
    $prev = $val;
}

如果第一个可能是0,那么您应该将$prev设置为循环之外的内容,并且首先是该值。

答案 1 :(得分:1)

回到基础?

<?php

$arr = [23,0,0,56,0,0,0,0,0,12,6,98,0,0];
    $nonzero = 0;
    for($i = 0; $i<count($arr); $i++){
        if($arr[$i]===0){
         $arr[$i] = $nonzero;
        }else{
         $nonzero = $arr[$i];
        }
    }

?>

答案 2 :(得分:1)

使用参考&,您可以使foreach变得更简单。

你应该试试这个:

    $prev = 0;
    foreach ($jsonstatisticsData as &$val) {
        if ($val == 0) $val = $prev;
        else $prev = $val;
    }