您好......我正面临一个未定义的偏移问题:第3行中的1个。我无法理解它是什么类型的错误。任何人都可以告诉我为什么这样的错误发生在PHP中
行中未定义的偏移量:3
foreach ($lines as $line)
{
list($var,$value) = explode('=', $line); //line 3
$data[$var] = $value;
}
您正在获取PHP notice
,因为您正在尝试访问未设置的数组索引。
list($var,$value) = explode('=', $line);
上面的线用$line
爆炸字符串=
并在0th
中分配$var
和1st
值的$value
值。当$line
包含一些没有=
的字符串时,问题就出现了。
我知道这是一个老问题,所提供的答案就足够了。
您正在收到PHP通知,因为您正在尝试访问未设置的数组索引。
但是我相信在使用list()
/ explode()
组合可能有空数组的情况下,克服未定义索引问题的最佳方法是使用array_pad()
设置默认值。
原因是当你使用list()
时,你知道你想从数组中获得的变量数量。
例如:
$delim = '=';
$aArray = array()
$intNumberOfListItems = 2;
list($value1, $value2) = array_pad(explode($delim, $aArray, $intNumberOfListItems ), $intNumberOfListItems , null);
基本上你传递第三个参数来爆炸,说明list()
变量需要多少个值(在上面的例子中为两个)。然后,当数组不包含列表变量的值时,使用array_pad()
提供默认值(在上面的示例中为null)。
通过做列表($ var,$ value)php将期望一个包含2个元素的数组,如果explode函数找不到相等的符号,它将只返回一个带有1个元素的数组,导致未定义的偏移量错误,offset 1是第二个数组的元素,因此很可能你的$ line变量之一没有等号
这是由于阵列。由于这个未定义的偏移误差将会出现数组索引...
所以请用print_r函数检查数组。
list
语言构造用于从数组创建单个变量。如果你的数组没有足够的元素来表示你在list
调用中期望的变量数,那么你将收到一个错误。在您的情况下,您有2个变量,因此您需要一个包含2个项目的数组 - 索引0和1。
解:
$lines = array('one' => 'fruit=apple', 'two' => 'color=red', 'three' => 'language');
foreach ($lines as $line)
{
list($var,$value) = (strstr($line, '=') ? explode('=', $line) : array($line, ''));
$data[$var] = $value;
}
print_r($data);
试试这个......
供参考http://in1.php.net/manual/en/function.list.php http://in1.php.net/manual/en/function.explode.php
这是因为你的$line
在字符串中的任何地方都不包含“=
”,因此它只包含array.list()中的一个元素,用于在一个操作中分配变量列表。您的列表包含2个元素,但是根据implode返回的数据,只有一个数据。所以它引发了一个通知。克服这种情况的一种方法是使用array_pad()方法。
list($var,$value) = array_pad(explode('=', $line),2,null);