2016-06-01 6 views
-2

私はexplode関数にいくつか問題があります。 私はこのようにそれを設定します。
お知らせ:オフセット未定義:Cで6:\ xamppの\ htdocsに\ slovenac \ zaloge \私は最初の18行の細かい結果を受け取った後、私はエラーメッセージが表示されましたmy php explode関数が "、" issueに反応する

$p = explode(";", $data[$c]); 

終了AVTORADIO JVC KD-X50BTEY; 0; 0; 135; Softtrade斗、ゴレ20D; JVC; 0097; 4975769396717:

EAN:18行目は次のようであること線上parser.php 18

私の爆発は "Gorèe20d"の直前の "。"に反応します。

どうすればこの問題を解決できますか?

<?php 
$row = 1; 
if (($handle = fopen("csv/".$_GET['file_name'], "r")) !== FALSE) { 
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
     $num = count($data); 
     $row++; 
     for ($c=0; $c < $num; $c++) { 
      echo $data[$c] . "<br />\n"; 
      $p = explode(";", $data[$c]); 
      echo "<tr>"; 
      echo "<td>".$p[0]."</td>"; 
      echo "<td>".$p[1]."</td>"; 
      echo "<td>".$p[2]."</td>"; 
      echo "<td>".$p[3]."</td>"; 
      echo "<td>".$p[4]."</td>"; 
      echo "<td>".$p[5]."</td>"; 
      echo "<td>".$p[6]."</td>"; 
      echo "<td>".$p[7]."</td>"; 
      echo "<td>".$p[8]."</td>"; 
      echo "</tr>"; 
     } 
    } 
    fclose($handle); 
} 

ここで終了エラーと私の結果は次のとおりです。

ean: 4975769396717;AVTORADIO JVC KD-X50BTEY;0;0;117;Urbo PE Bre�ice;JVC;0097; 
    ean: 4975769396717;AVTORADIO JVC KD-X50BTEY;0;0;118;Tripex PE Celje;JVC;0097; 
    ean: 4975769396717;AVTORADIO JVC KD-X50BTEY;0;0;129;Setring PE Medvode;JVC;0097; 
    ean: 4975769396717;AVTORADIO JVC KD-X50BTEY;0;0;131;Dar PE Ptuj;JVC;0097; 
    ean: 4975769396717;AVTORADIO JVC KD-X50BTEY;0;0;133;ETS Pregl PE Slovenska Bistrica;JVC;0097; 
    ean: 4975769396717;AVTORADIO JVC KD-X50BTEY;0;0;134;Digital Elektronik PESolkan;JVC;0097; 
    ean: 4975769396717;AVTORADIO JVC KD-X50BTEY;0;0;135;Softtrade d.o.o. 

    Notice: Undefined offset: 6 in C:\xampp\htdocs\slovenac\zaloge\parser.php on line 18 

    Notice: Undefined offset: 7 in C:\xampp\htdocs\slovenac\zaloge\parser.php on line 19 

    Notice: Undefined offset: 8 in C:\xampp\htdocs\slovenac\zaloge\parser.php on line 20 
    Gor�e 20d;JVC;0097; 

    Notice: Undefined offset: 4 in C:\xampp\htdocs\slovenac\zaloge\parser.php on line 16 
+0

を改善することができるいくつかのより多くのコードを示しています。おそらく17の数字行にエラーがあります –

+0

これは、他のものに "反応する"という意味ではなく、予想されたよりも ';'で区切られた文字列がどこかにあることを意味します。適切な入力サンプルを見ることなく、これは否定できない。 (なぜ、これは 'fgetcsv'でタグ付けされましたか?実際には使用していないのですか?) – mario

+0

_on line 18_!= _18th row_ in database。 PHPファイル – Thamilan

答えて

1

Notice: Undefined offsetはあなたのコードではなく、データファイルの18行目で発生します。これは、$p[6]が定義されていないためです。これは、CSVファイル内の一部の行が単に列/セミコロンが足りないためです。

値は、あなたの$p配列に設定されている場合だけ出力する前に、確認してください。

echo "<td>".(isset($p[0]) ? $p[0] : '-')."</td>"; 
echo "<td>".(isset($p[1]) ? $p[1] : '-')."</td>"; 

この意志の出力に'-'を、値がファイルに設定されていない場合。空の文字列''も使用できます。

forループを使用することによって、それはもう少しコンパクトに取得:

for ($i=0; $i<9; $i++) { 
    echo '<td>'.(isset($p[$i]) ? $p[$i] : '-').'</td>'; 
} 
+0

こんにちはDerVO、私は助けてくれてありがとうと言いますが、本当に助けてくれる人には非常に感謝します。あなたと腐食は非常に有益で、私はあなたに両方の親指を与えることはできません申し訳ありません。私がちょうど助けを得ようとしたので、私はこのことについてサポートに必ず連絡します。 もう一度あなたと腐食のおかげで。 –

0

あなたのコードに応じて付与されたために、あなたはcsvファイルの各行は、少なくとも9つの値が、あなたの最後の行を持っていることを取ります例には6つの値しかありません。

試してみてください。

<?php 
$row = 1; 
if (($handle = fopen("csv/".$_GET['file_name'], "r")) !== FALSE) { 
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
     $num = count($data); 
     $row++; 
     for ($c=0; $c < $num; $c++) { 
      echo $data[$c] . "<br />\n"; 
      $p = explode(";", $data[$c]); 
      echo "<tr>"; 
      foreach($p as $value){ 
       echo "<td>".$value."</td>"; 
      } 
      //if you want to always have nine columns 
      for($i=9-count($p); $i > 0; $i--){ 
       echo "<td></td>"; 
      } 
      echo "</tr>"; 
     } 
    } 
    fclose($handle); 
} 

これは一例であり、コードが

関連する問題