-1

次のphpコード:


<?php
$fopen = fopen("tasklistout.csv","r");
while(!feof($fopen))
{
    $line = fgets($fopen);
    echo "\r\n\t<tr>";
    $piece_array = preg_split("/[\s,]+/",$line);

    for ($forvar = 1; $forvar <= 5; $forvar++)
    {
        $array_index = $forvar - 1;
        echo "\r\n\t\t<td>" . $piece_array[$array_index] . "</td>";
    }

    echo "\r\n\t</tr>\r\n";
}
fclose($fopen);
?>

次のエラーが発生します: (4 回に分けて)


注意: 未定義のオフセット: 33 行目の file.php の 1


次の HTML ドキュメントでは:

<!doctype html>
<html lang="en">

   <head>
     <meta charset="utf-8">
     <title>Lab_11-Objective_01--Tables</title>
     <meta name="description" content="HTML 'table' element usage for Lab 11 Objective 01">
     <meta name="author" content="Charles E Lentz">
     <link rel="stylesheet" href="stylesheet.css">
   </head>

   <body>

   <table>
    <tr>
        <th>Image Name</th>
        <th>PID</th>
        <th>Session Name</th>
        <th>Session#</th>
        <th>Mem Usage</th>
    </tr>
    <?php
    $fopen = fopen("tasklistout.csv","r");
    while(!feof($fopen))
    {
        $line = fgets($fopen);
        echo "\r\n\t<tr>";
        $piece_array = preg_split("/[\s,]+/",$line);

        for ($forvar = 1; $forvar <= 5; $forvar++)
        {
            $array_index = $forvar - 1;
            echo "\r\n\t\t<td>" . $piece_array[$array_index] . "</td>";
        }

        echo "\r\n\t</tr>\r\n";
    }
    fclose($fopen);
    ?>

   </table>

   </body>

</html>

このエラーを修正するにはどうすればよいですか?

4

3 に答える 3

1

csvファイルの最後に空の行があります。とを
使用して、インデックスが配列に存在することを確認します。 ループの代わりに、関数と一緒にループを使用して実行できます。私のコード例を見てください。 issetempty
whileforeachfile

<?php
  // read entire file into an array
  $lines  = file( "tasklistout.csv" );
  // loop through each line
  foreach( $lines as $line ) {
    // remove whitespace from line
    $line = trim( $line );
    // make sure that line is not empty
    if ( $line ) {
      // split line with comma or space
      $piece_array  = preg_split( "/[\s,]+/", $line );
      // make sure that array contains at least 1 value
      if ( !empty( $piece_array ) ) {
        echo "\r\n\t<tr>";
        for( $i = 0; $i < 5; $i++ ) {
          if ( isset( $piece_array[$i] ) ) {
            echo "\r\n\t\t<td>".$piece_array[$i]."</td>";
          }
          else {
            echo "\r\n\t\t<td>&nbsp;</td>";
          }
        }
        echo "\r\n\t</tr>\r\n";
      }
    }
  }
?>
于 2013-08-24T16:39:45.250 に答える
0

sergiuが示唆したように、.csvファイルはおそらく5つのコンマを含むようにフォーマットされていません(おそらく1つだけです)

代わりにforeach ループを使用してこれを実現し、配列のインデックス付けを回避する必要があります (まあ、そうです)。ただし、最初var_dump$piece_array空でないかどうかを確認します。そうでない場合は、.csv ファイルを確認することをお勧めします。

于 2013-08-24T16:32:50.713 に答える