0

別の構造化配列に変換しようとしている 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 通知: 未定義のオフセット: 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

2 に答える 2

2

これが問題です:

[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];
  }
}
于 2012-11-15T15:28:17.283 に答える
0

すべての 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;
    }
}
于 2012-11-15T15:39:13.513 に答える