21

我面临一个问题,即第 3 行中未定义的偏移量:1。我不明白它是什么类型的错误。谁能告诉我为什么在php中会出现这样的错误

行中未定义的偏移量:3

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

7 回答 7

24

您正在获取 PHP notice,因为您正在尝试访问未设置的数组索引。

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

$line上面的行用in和value in展开字符串=并赋值。当包含一些没有.0th$var1st$value$line=

于 2013-05-24T05:43:03.337 回答
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)。

于 2014-10-30T11:16:48.653 回答
3

这是因为您在字符串中的任何位置$line都不包含“ =”,因此它仅包含一个元素,array.list() 用于在一次操作中分配变量列表。您的列表包含 2 个元素,但从 implode 返回的数据来看,只有一个数据。所以它会发出通知。克服这个问题的一种方法是使用array_pad()方法。

list($var,$value) = array_pad(explode('=', $line),2,null);
于 2018-07-05T11:59:35.893 回答
1

通过执行 list($var, $value) php 将期望一个包含 2 个元素的数组,如果explode 函数找不到等号,它将只返回一个包含 1 个元素的数组,导致未定义的偏移错误,偏移 1 是第二个数组的元素,因此很可能您的 $line 变量之一没有等号

于 2013-05-24T05:43:57.123 回答
1

这是由于数组。由于此未定义的偏移错误,数组索引未显示...

所以请用 print_r 函数检查数组。

于 2013-05-24T05:43:57.807 回答
1

语言构造list用于从数组创建单个变量。如果您的数组没有足够的元素来满足您在list调用中期望的变量数量,您将收到错误消息。在您的情况下,您有 2 个变量,因此您需要一个包含 2 个项目的数组 - 索引 0 和 1。

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

于 2013-05-24T05:44:02.007 回答
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

于 2013-05-24T07:08:17.610 回答