使用explode(...)后PHP数组中的“未定义的偏移量”

时间:2013-09-25 12:12:37

标签: php

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

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

7 个答案:

答案 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>';


}
?>