未初始化的字符串偏移错误
Uninitialized string offset error
为什么我收到未初始化的字符串错误,我搞不懂?
这是我的函数:
function show_site_name($url,$lenght)
{
$name='';
$i=0;
$slash=0;
while($slash<3 && $i<=$lenght)
{
if($url[$i]=='/') $slash++;
if($url[$i]!='/' && $slash==2) $name.=$url[$i];
$i++;
}
return($name);
}
已编辑:
我在这两行收到 "Uninitialized string offset" 错误:
if($url[$i]=='/') $slash++;
if($url[$i]!='/' && $slash==2) $name.=$url[$i];
这个功能比较傻。 PHP 为 parsing a url 提供了很好的原生功能。另外,我假设 "lenght" 是第一个参数的长度?这当然可以用 strlen
.
导出
show_site_name('http://www.example.com', strlen('http://www.example.com'));
将导致 Uninitialized string offset: 22
。
show_site_name('http://www.example.com', strlen('http://www.example.com')-1);
以上可能就是您想要的。选项基数为零,而不是一。
if($url[$i]=='/') $slash++;
上面一行是您超出字符串偏移量的地方。糟糕的逻辑。您可以修复代码并避免它或使用 isset
处理它。相信你的错误日志。
更新:
您可以像我展示的那样传递理智的参数来避免它。或者改成:
if (isset($url[$i])) {
if($url[$i]=='/') $slash++;
} else {
return $name;
}
但同样,这很愚蠢。
如果你非要这样做,那我们就叫它学习吧。为什么不这样做:
function show_site_name($url)
{
$lenght = strlen($url) -1;
...
传递可以简单地从第一个参数派生的第二个参数不是一个好的方法。
为什么我收到未初始化的字符串错误,我搞不懂?
这是我的函数:
function show_site_name($url,$lenght)
{
$name='';
$i=0;
$slash=0;
while($slash<3 && $i<=$lenght)
{
if($url[$i]=='/') $slash++;
if($url[$i]!='/' && $slash==2) $name.=$url[$i];
$i++;
}
return($name);
}
已编辑: 我在这两行收到 "Uninitialized string offset" 错误:
if($url[$i]=='/') $slash++;
if($url[$i]!='/' && $slash==2) $name.=$url[$i];
这个功能比较傻。 PHP 为 parsing a url 提供了很好的原生功能。另外,我假设 "lenght" 是第一个参数的长度?这当然可以用 strlen
.
show_site_name('http://www.example.com', strlen('http://www.example.com'));
将导致 Uninitialized string offset: 22
。
show_site_name('http://www.example.com', strlen('http://www.example.com')-1);
以上可能就是您想要的。选项基数为零,而不是一。
if($url[$i]=='/') $slash++;
上面一行是您超出字符串偏移量的地方。糟糕的逻辑。您可以修复代码并避免它或使用 isset
处理它。相信你的错误日志。
更新:
您可以像我展示的那样传递理智的参数来避免它。或者改成:
if (isset($url[$i])) {
if($url[$i]=='/') $slash++;
} else {
return $name;
}
但同样,这很愚蠢。
如果你非要这样做,那我们就叫它学习吧。为什么不这样做:
function show_site_name($url)
{
$lenght = strlen($url) -1;
...
传递可以简单地从第一个参数派生的第二个参数不是一个好的方法。