0

次のコードがあります。

$chart_data = array();
foreach ($range as $range_day) {
  foreach ($numbers as $number) {
    if($range_day == $number['date']){
      @$chart_data[$range_day] += $number['events'];
    } else {
      if(isset($chart_data[$range_day])){
        $chart_data[$range_day] += 0;
      }
    }
  }
}

この行:$chart_data[$range_day] += 0;未定義のインデックスエラーが発生したため、issetチェックを追加しましたが、設定されていないため、配列が破壊されます。私はそれが設定されていないことを知っており、気にしませんが、@解決策が趣味が悪いことを隅々まで読みました。エラーを正しい方法で削除するにはどうすればよいですか?

4

3 に答える 3

1

設定されていないかどうかを確認してから設定できます。

foreach ($numbers as $number) {
    if (!isset($chart_data[$range_day])) {
        $chart_data[$range_day] = 0;
    }
    if ($range_day == $number['date']) {
        $chart_data[$range_day] += $number['events'];
    } else {
        $chart_data[$range_day] += 0; // you're just adding 0 so why have this line at all?
    }
}

$rangeこの回答は、重複を含む可能性がある$range_dayため、 の対応する要素を上書きしないことを前提としています$chart_data

于 2012-05-25T21:17:19.917 に答える
1

array_key_exists関数を見てみましたか: http://php.net/manual/en/function.array-key-exists.php ?

何かのようなもの:

$chart_data = array();
foreach ($range as $range_day) {
  foreach ($numbers as $number) {
    if(!array_key_exists($range_day, $array)) {
      $chart_data[$range_day] = 0;
    }
    if($range_day == $number['date']){
      $chart_data[$range_day] += $number['events'];
    }
  }
}
于 2012-05-25T21:15:35.130 に答える
1

最初にゼロに設定することができます:

$chart_data = array();
foreach ($range as $range_day) {
  $chart_data[$range_day] = 0;
  foreach ($numbers as $number) {
    if($range_day == $number['date']){
      $chart_data[$range_day] += $number['events'];
    } else {
      if(isset($chart_data[$range_day])){
        $chart_data[$range_day] += 0;
      }
    }
  }
}
于 2012-05-25T21:15:53.907 に答える