注意:未初始化的字符串偏移量

时间:2013-09-29 11:00:19

标签: php notice

我在下面有以下代码,它的工作非常好 - 但是现在当我报告所有错误时 - 我会看到这个:

  

注意:未初始化的字符串偏移量:9英寸   第110行的C:\ xampp \ htdocs \ website \ dev \ lib \ player.class.php注意:   未初始化的字符串偏移量:10英寸   第110行的C:\ xampp \ htdocs \ website \ dev \ lib \ player.class.php注意:   未初始化的字符串偏移:11英寸   第110行的C:\ xampp \ htdocs \ website \ dev \ lib \ player.class.php注意:   未初始化的字符串偏移量:12英寸   第110行的C:\ xampp \ htdocs \ website \ dev \ lib \ player.class.php注意:   未初始化的字符串偏移量:13英寸   第110行的C:\ xampp \ htdocs \ website \ dev \ lib \ player.class.php

第110行

$this->formattedname .= "<span style='color:" . $colour . "'>" . $this->username[$i] . "</span>";

在foreach中

有谁知道我做错了什么?我无法找到解决这些错误的解决方案.. :(

if ($this->admin == 1) {
            $colours = explode("~", $this->gradientcolours);
            $gradient = new ColourGradient(array(0 => $colours['0'], (strlen($this->username) - 1) => $colours['1']));
            $this->formattedname .= ($this->admin == 1) ? "<b><i><a style='text-decoration: none;' title='" . $this->title . "' href='/profile/" . $this->id . "'>" : "<b><a title='" . $this->title . "' href='/profile/" . $this->id . "'>";
            $this->formattedname2 = ($this->admin == 1) ? "<b><i><a style='text-decoration: none;' title='" . $this->title . "' href='/profile/" . $this->id . "'>" : "<b><a title='" . $this->title . "' href='/profile/" . $this->id . "'>";



                    foreach($gradient as $i => $colour) {
                $this->formattedname .= "<span style='color:" . $colour . "'>" . $this->username[$i] . "</span>";

            }

            $this->formattedname .= ($this->admin == 1) ? "</a></i></b>" : "</a></b>";

            $this->formattedname2 .= ($this->admin == 1) ? "</a></i></b>" : "</a></b>";

        }

4 个答案:

答案 0 :(得分:3)

如果以下任何变量实际上是字符串或null而不是数组,则会发生此错误。

在使用数组之前尝试测试并初始化数组

if( !isset($this->username[$i]) ) $this->username[$i] = '' ;

答案 1 :(得分:0)

这不是错误,而是通知。错误或警告意味着您做错了什么/犯了错误。通知只是暗示可以做得更好。

告诉你的是,你使用的是一个不存在的密钥:

$array[0] = 0;
$array[1] = 1;
$array[2] = 2;

echo $array[0]; // no notice, it exists
echo $array[2]; // no notice, it exists
echo $array[9]; // the notice will fire, because key 9 doesn't exist

在你的代码中,我不知道哪一行是110,但我猜是$this->username[$i]是问题,用户9到13不存在

如果$this->username不是数组而是字符串,它将返回第N个字符:

$string = "example";
echo $string[1]; // will return X, an array starts counting at 0 (zero-index-based)
echo $string[50]; // blank echo, and the notice because character 50 doesn't exist

答案 2 :(得分:0)

如果对字符串使用连接.=,则必须像这样初始化字符串

$this->formattedname = "";

和连接后

答案 3 :(得分:0)

问题在于这一行:

$this->username[$i].

您的用户名可能有5个字符,而$ i可以说是12.使用适当的条件进行验证。