你能告诉我为什么给我看大量的通知吗?
我是 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
您正在使用未初始化的变量。 $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>';
} ?>
这是一个
未定义的偏移量:
$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);
从文本文件中 grep 获取的数据不是 100% 的预期格式,例如:
aaaaa-bbbbbb-cccccc-ddddddd
aaaaa--cccccc-dddddd
aaaaa-ddddd
这意味着,您需要验证您读取的数据是否有效且格式正确。
需要考虑的一些事项:如果文件末尾的空行只发生一次(不是每行),可能会导致此问题。
如果您希望在数据缺少分隔符的情况下使用默认值,您可以添加
$columns = $columns + array('default_for_key0', 'default1', 'default2', 'default3');
explode()
后.
您读取数据文件的每一行。当您有一个空行时,您的$result
中没有数据。
然后你尝试在空字符串上爆炸,columns[0]
没有设置。
尝试检查数组是否不为空,也许使用
if(count($columns) > 2) {
}
或检查阵列是否设置。
if(isset($columns[0])) {
}
否则,您可以使用默认数据填充数组。
您的数据可能并不像您想象的那么理智。
$columns=explode('-', "abc");
$columns[0]; // "abc";
$columns[1]; // gives: Undefined offset 1
要么确保您的数据符合您的预期,要么明确尝试查找错误情况,例如没有-
的行。
您可以执行count($columns)
以了解有多少列。
要非常警惕以下结构:
$kinds[trim($columns[3])]
这里有 2 个可能的未定义偏移量。 $columns[3]
和$kinds[#index#]
都可以是未定义的。
尝试这种方式,您将看到每次是否有 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>';
}
?>
首先,您需要将$kinds设置为数组。其次,在程序中使用之前检查数组键,否则它将抛出如下错误: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>';
}
?>