2016-06-16 4 views
-2

配列値の値「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 

    ) 

Iはコードの下に使用してみましたが、それはエラーを表示し、変更する上では、最大で最初の値を変更します。

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

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

      } 

     } 
+3

を? – vaso123

+2

'あるarray_walk( $データ、 関数(&$値)0 =前{ 静的$; IF($値== 0){ $値= $前; } $以前= $値; } ); ' –

答えて

1

最初は、この使用し、その後0ことができない場合:最初は0ことができれば、あなたはループの外で何かに$prevを設定する必要があり、最初にその値になります

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

を。

+2

' $ prev'が '0'に戻されるのを避けるために' else'条件を追加する必要があります。値を渡してループを少し簡略化することもできます。 'foreach($ jsonstatisticsData as&$ val){'と '$ val = $ prev;'行を更新してください。 – Steve

+0

はい、else条件を追加して作業しました。ありがとう! – Wings2fly

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]; 
     } 
    } 

?> 
1

&を使用すると、foreachをよりシンプルにすることができます。

あなたはこの試してみてください:最初の項目が0であれば、そこにどうあるべきか

$prev = 0; 
    foreach ($jsonstatisticsData as &$val) { 
     if ($val == 0) $val = $prev; 
     else $prev = $val; 
    } 
関連する問題