php - PHP错误: Undefined offset error within foreach loop

标签 php arrays foreach compiler-errors

我有一个csv文件,试图将其转换为其他结构化数组。首先,我将其转换为一个名为all_data()的数组,其结构如下:

$data = file_get_contents($id . '.csv');
      $data_array = explode("\n", $data);
      foreach($data_array AS $data){
            $all_data[] = explode("\t", $data);
      }

结果看起来像这样:
    array(5) {
      [0]=>
      array(2) {
        [0]=>
        string(10) "2012-11-14"
        [1]=>
        string(2) "10"
      }
      [1]=>
      array(2) {
        [0]=>
        string(10) "2012-11-14"
        [1]=>
        string(2) "10"
      }
      [2]=>
      array(2) {
        [0]=>
        string(10) "2012-11-14"
        [1]=>
        string(2) "10"
      }
      [3]=>
      array(2) {
        [0]=>
        string(10) "2012-11-14"
        [1]=>
        string(2) "10"
      }

      [4]=>
      array(1) {
        [0]=>
        string(0) ""
      }

}

然后使用以下代码将其转换为im_arr():
  foreach($all_data as $key => $value){
            $im_arr[$key][$value[0]] = $value[1];
       }

结果:
array(5) {
  [0]=>
  array(1) {
    ["2012-11-14"]=>
    string(2) "10"
  }
  [1]=>
  array(1) {
    ["2012-11-14"]=>
    string(2) "10"
  }
  [2]=>
  array(1) {
    ["2012-11-14"]=>
    string(2) "10"
  }
  [3]=>
  array(1) {
    ["2012-11-14"]=>
    string(2) "10"
  }

  [4]=>
  array(1) {
    [""]=>
    NULL
  }
}

然后,最后一个foreach循环给了我我想要的结果:
foreach ($im_arr as $val) {
    foreach ($val as $key => $val2) {
        $im_data[$key]=$val2;
    }
       }

结果im_data()为:
array(2) {
  ["2012-11-14"]=>
  string(2) "10"
  [""]=>
  NULL
}

这将是完美的,因为数组im_data()正是我想要从all_data()中获得的东西。但是,当我试图将此代码放入程序的另一部分时,它不起作用,并且我认为这可能是由于收到的警告:

“PHP注意: undefined offset :1 in ...,第93行”

第93行对应于以下行:
$im_arr[$key][$value[0]] = $value[1];

这是代码的完整部分:
  $all_data = array();
  $im_arr=array();

$data = file_get_contents($id . '.csv');
      $data_array = explode("\n", $data);
      foreach($data_array AS $data){
            $all_data[] = explode("\t", $data);
      }

      foreach($all_data as $key => $value){
            $im_arr[$key][$value[0]] = $value[1];  //the line for the error
       }
    $im_data=array();  

foreach ($im_arr as $val) {
    foreach ($val as $key => $val2) {
        $im_data[$key]=$val2;
    }
       }




var_dump($im_data);

我知道针对同一错误发布了很多问题,但是我无法弄清楚这段特定代码的问题。

最佳答案

这就是问题:

[4]=>
  array(1) {
    [0]=>
    string(0) ""
  }

只需检查数据是否已设置,然后将其添加到$im_arr中,该数据是否为空:
foreach ($all_data as $key => $value) { 
  if (isset($value[0]) && isset($value[1]) && !empty($value[0]) && !empty($value[1])) {
    $im_arr[$key][$value[0]] = $value[1];
  }
}

关于php - PHP错误: Undefined offset error within foreach loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13400414/

相关文章:

Java Applet的URLConnection到PHP没有效果

php - Jquery自动完成在一行中显示来自mysql的两行

php - 对 2 深数组进行多排序

java - 最大行中的最小元素

vba - Excel VBA : There must be a better way to use a loop to delete rows based on cell contents

php - FGETCSV 文档缺陷

javascript - 在表单中动态显示数据

javascript - 使用 lodash 或 underscorejs 查找字段的数组计数

java - 根据其他数组的结果设置数组的值

php - 在 PHP 中获取值时遇到问题