以下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>
如何解决此错误?
答案 0 :(得分:1)
Undefined offset
错误意味着该变量中的数组项不存在。这表明在您的代码中应该创建数组(但不是),问题进一步发展。例如,preg_split("/[\s,]+/",$line);
行可能是此处的问题。
要找出添加此行:
var_dump($piece_array);
这一行之后
$piece_array = preg_split("/[\s,]+/",$line);
如果您需要更多的帮助,请将结果作为编辑发布,我会尽力帮助您。
答案 1 :(得分:1)
最后您的csv
文件中有一个空行。
使用isset
和empty
检查数组中是否存在索引
您可以使用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> </td>";
}
}
echo "\r\n\t</tr>\r\n";
}
}
}
?>
答案 2 :(得分:0)
正如sergiu建议的那样,.csv文件可能没有格式化为包含五个逗号(可能只有一个)
您应该尝试使用foreach loop来实现此目的,从而避免数组索引(嗯,排序)。
但首先var_dump
$piece_array
查看它是否为空,否则您可能需要检查.csv文件