我想替换值' 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;
}
}
答案 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;
}