未定义的偏移量1

21

我遇到了一个问题,错误提示是在第3行出现undefined offset :1,但我不理解这是何种类型的错误。 有人能告诉我为什么PHP会出现这样的错误吗?

在第3行出现未定义的偏移量错误。

    foreach ($lines as $line)
    {
      list($var,$value) = explode('=', $line); //line 3
      $data[$var] = $value;
    }

在你的循环之前,print_r($lines); 的输出是什么? - Hanky Panky
我目前遇到了这个问题。我有这行代码:list($lastname, $firstname, $email, $city, $bYear) = explode('|', $line); 当我使用print_r时,输出结果与预期相符,但是我仍然会收到“Undefined offset Notice”的通知。你有什么想法吗? - CodeConnoisseur
7个回答

24

您之所以收到 PHP notice 的警告,是因为您试图访问未设置的数组索引。

list($var,$value) = explode('=', $line);

上述代码使用=字符分割字符串$line,然后将第0个值赋给变量$var,将第1个值赋给变量$value。当$line中不含=字符时,会出现问题。


谢谢回答。print_r($lines) 显示了最后一个没有 = 的值。有什么方法可以解决这个问题? - tushAR
@tushAR:在执行explode之前,请检查该值是否具有= - Nauphal

11

我知道这是一个老问题,而且提供的答案已经足够。

你收到PHP通知是因为你试图访问未设置的数组索引。

但是,我认为在存在空数组的情况下使用list()/explode()组合时,克服未定义索引问题的最佳方法是使用array_pad()设置默认值。

原因是当你使用list()时,你知道你想从数组中获取多少个变量。

例如:

$delim = '=';
$aArray = array()
$intNumberOfListItems = 2;


list($value1, $value2) = array_pad(explode($delim, $aArray, $intNumberOfListItems ), $intNumberOfListItems , null);
基本上你要传递第三个参数到explode,以确定你需要为list()变量 (在上面的例子中是两个) 提取多少个值。然后使用array_pad()当数组不包含列表变量的值时,提供默认值(在上面的例子中是null)。

3
这是因为您的$line字符串中没有"=",因此它在数组中只包含一个元素。list()用于在一次操作中分配一组变量。您的列表包含2个元素,但从implode返回的数据只有一个数据。因此,它会抛出一个通知。 克服这个问题的一种方法是使用array_pad()方法。
list($var,$value) = array_pad(explode('=', $line),2,null);

1

1
通过执行list($var, $value),PHP会期望一个由两个元素组成的数组。如果explode函数没有找到等号,它只会返回一个只有一个元素的数组,导致未定义偏移错误。偏移量1是数组的第二个元素,因此很可能你的某个$line变量没有等号。

1
由于数组的原因,该数组索引未显示导致出现了未定义的偏移错误...

请使用print_r函数检查数组。


1
< p > list 语言结构用于从数组中创建单独的变量。如果您的数组元素数量不足以满足 list 调用中期望的变量数量,则会发生错误。在您的情况下,您有 2 个变量,因此需要一个包含 2 个项目的数组 - 索引为 0 和 1。

http://php.net/manual/en/function.list.php


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接