【问题标题】:PHP: Undefined offsetPHP:未定义的偏移量
【发布时间】:2014-10-01 09:16:41
【问题描述】:

在某些页面上,我收到错误:

PHP 注意:未定义的偏移量:1 in /var/www/example.com/includes/head.php 第 23 行

代码如下:

if ($r)
{

    list($r1, $r2)=explode(" ", $r[0],2);
    $r1 = mb_strtolower($r1);
    $r3 = " ";
    $r2 = $r3.$r2;
    $r[0] = $r1.$r2;
    $page_title_f = $r[0]." some text";
    $page_title_s = "some text ";
    $page_title = $page_title_s.$page_title_f;

}

第 23 行有错误:

list($r1, $r2)=explode(" ", $r[0],2);

您能否帮助了解可能是什么问题?

更新

感谢大家的帮助!我部分解决了问题。

$r 是数据库中的行。 该脚本接受一个字符串并开始操作。将大写字母转换为小写字母。据我了解,字符串必须有一个空格,否则会出现错误“未定义的偏移量”。因为脚本试图找到第一个空格,然后合并第一个空格之前的单词,并将空格与出现在空格之后的所有内容合并。 (:我不明白他为什么这样做,如果字符串中的空格没有,就没有办法摆脱这种情况,他只是抛出一个错误。):总的来说,这是一个非常古老和糟糕的引擎网络商店,叫做 Shop-脚本。发布文件的完整列表,也许它会更清楚。

http://pastebin.com/Pz1TKpr3

【问题讨论】:

  • $r的值是多少?
  • 你能提供$r[0] 的值吗?因为它给出了未定义的偏移量1(不是0,就像其他一些cmets 一样)-它很可能不能被@987654330 分解@ (或者您在视觉上看到的空格并不是严格意义上的 ' ' 字符。编辑:我假设您的意思是有错误的行在它所在的位置,而不是在 $r[0] = $r1.$r2; 行之后?

标签: php undefined offset explode notice


【解决方案1】:

我的回答并非针对您的代码。对于在尝试使用您创建的数组的特定元素时遇到此错误的其他人,请尝试在创建数组本身时索引您的元素。这可以帮助您分解/打印特定元素/对数组做任何您想做的事情。

【讨论】:

    【解决方案2】:

    试试:

    $words = explode(' ', $r[0], 2);
    $r1 = isset($words[0]) ? $words[0] : '';
    $r2 = isset($words[1]) ? $words[1] : '';
    

    如果 $r[0] 不包含 2 个单词,您的代码会出错,因为 explode() 将返回一个只有一个元素的数组,并且您不能将其分配给两个变量。此代码在尝试分配之前测试单词是否存在。

    【讨论】:

      【解决方案3】:

      您收到的未定义索引错误是因为您尝试在变量 ($r) 中展开的偏移量不存在。

      您可以通过以下操作检查$r 是什么:

      print_r($r);
      

      var_dump($r);
      

      在进一步调试此问题之前,您需要显示 $r 的内容。

      但猜测是,您的 $r 变量是您尝试分解的字符串,但您尝试将其作为数组访问。

      如果你这样爆炸会发生什么:

      list($r1, $r2) = explode(' ', $r, 2);
      

      【讨论】:

      • 警告:explode() 期望参数 2 是字符串,数组在 /var/www/example.com/includes/head.php 第 23 行给出
      • @n1k1c4 $r 数据是什么样的?
      • 只是一个简单的文本。一两个字。
      【解决方案4】:
      list($r1, $r2) = explode(" ", $r[0],2);
      

      当提供两个变量时,list() 将需要一个包含至少 2 个项目的数组。
      但是,正如您提到的错误所示,您的 explode() 调用似乎返回了一个只有一项的数组。

      您必须检查 $r[0] 的内容以确保它确实包含您的拆分字符或手动分配 $r1$r2 并进行完整性检查。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多