-1

你能告诉我为什么要给我很多通知吗?

我是 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
4

7 回答 7

2

您正在使用未初始化的变量。 $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>'; 

} ?>
于 2013-09-25T12:20:15.753 回答
1

Some things to consider: a blank line at the end of the file could cause this if it only happens once (not each line).

If you want to have default values in case your data is missing seperators you can add

$columns = $columns + array('default_for_key0', 'default1', 'default2', 'default3');

after explode().

于 2013-09-25T12:23:22.567 回答
1

这是一个未定义的偏移量:

$array[0] = "test1";
$array[1] = "test2";

echo $array[3];

你最好使用你知道里面有什么的对象或数组。

要摆脱使用 if's:

$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

这意味着,您需要验证您读取的数据是否有效且格式正确。

于 2013-09-25T12:17:30.663 回答
0

您读取数据文件的每一行。当您有一个空行时,您的$result.

然后你尝试在一个空字符串上爆炸并且columns[0]没有设置。

尝试检查数组是否不为空

if(count($columns) > 2) {

}

或检查是否设置了数组。

if(isset($columns[0])) {

}

否则你可以用默认数据填充数组。

于 2013-09-25T12:19:37.093 回答
0

你的数据可能不像你想象的那么健全。

$columns=explode('-', "abc");
$columns[0]; // "abc";
$columns[1]; // gives: Undefined offset 1

要么确保您的数据符合您的预期,要么明确尝试查找错误案例,例如带有 no 的行-

您可以count($columns)查明有多少列。


非常小心以下结构:

$kinds[trim($columns[3])]

您在这里有 2 个可能的未定义偏移量。$columns[3]并且$kinds[#index#]都可以是未定义的。

于 2013-09-25T12:19:41.237 回答
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>'; 
}             
?>
于 2013-09-25T12:39:34.153 回答
0

首先,您需要将 $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>';


}
?>
于 2013-09-25T13:20:00.003 回答