注意:未定义的偏移量:第33行的file.php中为1

时间:2013-08-24 16:22:03

标签: php

以下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>

如何解决此错误?

3 个答案:

答案 0 :(得分:1)

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

要找出添加此行:

var_dump($piece_array);

这一行之后

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

如果您需要更多的帮助,请将结果作为编辑发布,我会尽力帮助您。

答案 1 :(得分:1)

最后您的csv文件中有一个空行。
使用issetempty检查数组中是否存在索引 您可以使用while循环以及file函数来代替foreach循环。请参阅我的示例代码。

<?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";
      }
    }
  }
?>

答案 2 :(得分:0)

正如sergiu建议的那样,.csv文件可能没有格式化为包含五个逗号(可能只有一个)

您应该尝试使用foreach loop来实现此目的,从而避免数组索引(嗯,排序)。 但首先var_dump $piece_array查看它是否为空,否则您可能需要检查.csv文件