PHP错误:foreach循环中未定义的偏移量错误

PHP错误:foreach循环中未定义的偏移量错误,php,arrays,foreach,compiler-errors,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(

我有一个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) ""
      }

}
结果如下所示:

$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()的结果为:

这将是完美的,因为数组im_data()正是我想要从所有的_data()中得到的。但是,当我试图将此代码放入程序的另一部分时,它不起作用,我想这可能是因为我收到了警告:

“PHP注意:第93行未定义的偏移量:1英寸”

第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\u 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];
  }
}

对于每个foreach,我都会预先检查第一个参数是否是数组

比如,

//Just add line below for every foreach (and add any required else statement if needed)
if(is_array($im_arr))
foreach ($im_arr as $val) {
    if(is_array($val))
    foreach ($val as $key => $val2) {
        $im_data[$key]=$val2;
    }
}

在向子阵列添加关键点之前创建子阵列<代码>如果(!array_key_存在($key,$im_arr)){$im_arr[$key]=array();}。或者正如MarcB所说,您的某些值的格式不正确。您的文件中可能至少有一行没有
\t
,在$all\u数据中至少有一个条目没有
1
索引。这很有意义,但是我仍然收到相同的错误通知。Marc B:这可能是我得到最后一个数组元素为“=>NULL”的原因吗?我该如何解决这个问题呢?是的,这就是问题所在,只需在处理它们之前检查它们是否已设置:
if(isset($value[0])&&isset($value[1]){process data!}