你能告诉我为什么要告诉我很多通知吗?
我是php的新手,不明白我的错误在哪里,来自行的注意事项:
<td>'.$columns[1].'</td>
要排队:
$sum+=$columns[2];
这是我的代码:
<?php
if(file_exists('data.txt'))
{
$result= file('data.txt');
$sum='0';
foreach($result as $value)
{
$columns=explode('-', $value);
echo '<tr>
<td>'.$columns[0].'</td>
<td>'.$columns[1].'</td>
<td>'.$columns[2].'</td>
<td>'.$kinds[trim($columns[3])].'</td>
</tr>';
$sum+=$columns[2];
}
echo '<tr>
<td>--</td>
<td>--</td>
<td>' . $sum . ' </td>
<td>--</td>
</tr>';
}
?>
我是php的新手,不明白我的错误在哪里:(来自行的通知
<td>'.$columns[1].'</td>
到行
$sum+=$columns[2];
以下是通知:
Notice: Undefined offset: 3 in C:\xampp\htdocs\HomeworkOne\index.php on line 31
Notice: Undefined index: in C:\xampp\htdocs\HomeworkOne\index.php on line 31
Notice: Undefined offset: 2 in C:\xampp\htdocs\HomeworkOne\index.php on line 33
Notice: Undefined offset: 1 in C:\xampp\htdocs\HomeworkOne\index.php on line 29
Notice: Undefined offset: 2 in C:\xampp\htdocs\HomeworkOne\index.php on line 30
Notice: Undefined offset: 3 in C:\xampp\htdocs\HomeworkOne\index.php on line 31
Notice: Undefined index: in C:\xampp\htdocs\HomeworkOne\index.php on line 31
答案 0 :(得分:1)
这是一个未定义的偏移量:
$array[0] = "test1";
$array[1] = "test2";
echo $array[3];
你最好使用你知道里面的对象或数组。
如果是的话,可以使用:
$array[0] = "test1";
$array[1] = "test2";
if (array_key_exists(3, $array)) {
echo $array[3];
}
您案件中的问题:
$columns = explode('-', $value);
您从文本文件中获取的数据不是您期望的格式的100%,例如:
aaaaa-bbbbbb-cccccc-ddddddd
aaaaa--cccccc-dddddd
aaaaa-ddddd
这意味着,您需要验证您阅读的数据是否为有效且格式正确。
答案 1 :(得分:1)
您正在使用未初始化的变量。
$columns[1]
,$columns[2]
和$columns[3]
未获得值
请尝试更正此代码:
<?php
if(file_exists('data.txt'))
{
$result= file('data.txt');
$sum='0';
foreach($result as $value)
{
$columns=explode('-', $value);
$kindsDisplay = (isset($columns[3]) && ! empty($kinds[trim($columns[3])])) ? $kinds[trim($columns[3])] : '';
$one = isset($columns[1]) ? $columns[1] : '';
$two = isset($columns[2]) ? $columns[2] : '';
$sum+= isset($columns[2]) ? $columns[2] : 0;
echo '<tr>
<td>'.$columns[0].'</td>
<td>'.$columns[1].'</td>
<td>'.$columns[2].'</td>
<td>'.$kindsDisplay.'</td>
</tr>';
}
echo '<tr>
<td>--</td>
<td>--</td>
<td>' . $sum . ' </td>
<td>--</td>
</tr>';
} ?>
答案 2 :(得分:1)
需要考虑的一些事项:文件末尾的空行如果只发生一次(不是每行),可能会导致这种情况。
如果您想拥有默认值,以防数据丢失分隔符,您可以添加
$columns = $columns + array('default_for_key0', 'default1', 'default2', 'default3');
在explode()
之后。
答案 3 :(得分:0)
您读取数据文件的每一行。如果您有一个空白行,则$result
中没有数据。
然后,您尝试在空字符串上爆炸,并且未设置columns[0]
。
尝试使用
检查数组是否为空if(count($columns) > 2) {
}
或检查数组是否已设置。
if(isset($columns[0])) {
}
否则您可以使用默认数据填充数组。
答案 4 :(得分:0)
您的数据可能不如您想象的那么理智。
$columns=explode('-', "abc");
$columns[0]; // "abc";
$columns[1]; // gives: Undefined offset 1
确保您的数据符合预期,或明确尝试查找错误情况,例如没有-
的行。
您可以count($columns)
查看有多少列。
对以下结构非常警惕:
$kinds[trim($columns[3])]
这里有2个可能的未定义偏移量。 <{1}}和$columns[3]
都可以是未定义的。
答案 5 :(得分:0)
尝试这种方式,您将看到每次都有4列:
<?php
if (file_exists('data.txt')) {
$result= file('data.txt');
$sum=0;
foreach($result as $value) {
$columns=explode('-', $value);
echo '<tr>';
foreach ($columns as $key => $column) {
echo '<td>'.$column.'</td>';
if ($key == 2) $sum += $column;
}
echo '</tr>';
echo '<tr><td>--</td><td>--</td><td>'.$sum.'</td><td>--</td></tr>';
}
?>
答案 6 :(得分:0)
首先,您需要将$ types设置为数组。 其次,在程序中使用之前检查数组键,否则会抛出如下错误:http://d.pr/i/GzVk
检查修改后的代码,我希望这对您有所帮助。
<?php
if(file_exists('data.txt'))
{
$result= file('data.txt');
$sum='0';
$kinds = array();
foreach($result as $value)
{
$columns=explode('-', $value);
if(array_key_exists($columns[0], $columns)) {
echo '<td>'.$columns[0].'</td>';
}
if(isset($columns[1]) && array_key_exists($columns[1], $columns)) {
echo '<td>'.$columns[1].'</td>';
}
if(isset($columns[2]) && array_key_exists($columns[2], $columns)) {
echo '<td>'.$columns[2].'</td>';
$sum+=$columns[2];
}
if(isset($columns[3]) && array_key_exists($columns[3], $columns)) {
echo '<td>'.$kinds[trim($columns[3])].'</td>';
}
echo '</tr>';
}
echo '<tr>
<td>--</td>
<td>--</td>
<td>' . $sum . ' </td>
<td>--</td>
</tr>';
}
?>