我遇到了一个问题,错误提示是在第3行出现undefined offset :1,但我不理解这是何种类型的错误。 有人能告诉我为什么PHP会出现这样的错误吗?
在第3行出现未定义的偏移量错误。
foreach ($lines as $line)
{
list($var,$value) = explode('=', $line); //line 3
$data[$var] = $value;
}
我遇到了一个问题,错误提示是在第3行出现undefined offset :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
,然后将第0
个值赋给变量$var
,将第1
个值赋给变量$value
。当$line
中不含=
字符时,会出现问题。
print_r($lines)
显示了最后一个没有 =
的值。有什么方法可以解决这个问题? - tushARexplode
之前,请检查该值是否具有=
。 - Nauphal我知道这是一个老问题,而且提供的答案已经足够。
你收到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)。$line
字符串中没有"=
",因此它在数组中只包含一个元素。list()用于在一次操作中分配一组变量。您的列表包含2个元素,但从implode返回的数据只有一个数据。因此,它会抛出一个通知。
克服这个问题的一种方法是使用array_pad()方法。list($var,$value) = array_pad(explode('=', $line),2,null);
$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/zh/function.list.php http://in1.php.net/manual/zh/function.explode.php
请使用print_r函数检查数组。
list
语言结构用于从数组中创建单独的变量。如果您的数组元素数量不足以满足 list
调用中期望的变量数量,则会发生错误。在您的情况下,您有 2 个变量,因此需要一个包含 2 个项目的数组 - 索引为 0 和 1。
print_r($lines);
的输出是什么? - Hanky Panky