2013-08-24 50 views
-1

下面的PHP代码:注意:未定义偏移:1 file.php上线33


<?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个分开的场合)


Notice: Undefined offset: 1 in file.php on line 33


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

那么,tasklistout.csv是什么样的?我打赌一些线条没有五个由“,”分隔的值,但是只有一个。 –

+0

在'for'循环之前使用'print_r($ piece_array)' – bystwn22

+0

我不认为这是重复的。我知道错误'Undefined Offset'是什么......它意味着返回该索引的数组值是有问题的......但是我所要求的是造成该错误的原因。 –

回答

1

Undefined offset错误表示该变量中的数组项不存在。这表明这个问题在你的代码中应该被创建(但不是)的地方。例如,preg_split("/[\s,]+/",$line);行可能是这里的问题。

要找出加入这一行:如果您需要

var_dump($piece_array);

此行

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

后futher帮助后的结果作为一个编辑,我会尽力帮助你。

+0

这是一个非常愚蠢的错误。该错误甚至没有在PHP中,它在csv文件中......底部有1行,一个额外的空白行引发这个错误.....我应该删除这个问题吗? –

0

至于建议的Sergiu,.csv文件可能是不格式化,以包含五个逗号(也许只有一个)

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

1

。在你的csv文件在最后一个空行。
使用issetempty检查索引是否存在于您的数组中。
取代while循环,您可以使用foreach循环以及file函数执行循环。看我的示例代码。

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

'FILE_SKIP_EMPTY_LINES'更简单。 – mario