-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

Undefined offset错误意味着该变量中的数组项不存在。这表明问题进一步出现在您的代码中应该创建数组的位置(但不是)。例如,这preg_split("/[\s,]+/",$line);条线可能是这里的问题。

要找出添加此行:

var_dump($piece_array);

在这条线之后

$piece_array = preg_split("/[\s,]+/",$line);

如果您需要进一步的帮助,请将结果发布为编辑,我会尽力帮助您。

于 2013-08-24T16:29:37.623 回答
1

csv文件末尾有一个空行。
使用issetandempty检查数组中是否存在索引。您可以使用循环和函数来
代替循环。请参阅我的示例代码。 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 文件可能未格式化为包含五个逗号(可能只有一个)

您应该尝试使用foreach 循环来实现这一点,从而避免数组索引(嗯,有点)。但首先var_dump$piece_array查看它是否不为空,否则您可能需要检查 .csv 文件

于 2013-08-24T16:32:50.713 回答