在循环中定义新数组的索引?

时间:2012-05-25 21:12:44

标签: php arrays

我有以下代码:

$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检查,但它没有设置,所以它会破坏我的数组。我知道它没有设置,我也不在乎,但我读到@解决方案的味道很差。如何以正确的方式删除错误?

3 个答案:

答案 0 :(得分: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'];
    }
  }
}

答案 1 :(得分: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;
      }
    }
  }
}

答案 2 :(得分: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中的相应元素。