2012-01-28 63 views
0

现在我处理的PHP,但I`ve有一个奇怪的问题stucked: 我正在为字符串长度的简单富:PHP函数传递争论?

function slen($str) { 
    $len; 
    for ($len=0; $str[$len]; $len++) { 
      /* while tehre is a symbol in $str continue counting, old C metnod */ 
    } 
    return (int)$len; 
} 

它了作为一个代码,并输出长度,但它繁荣与PHP警告消息: PHP注意:未初始化的字符串偏移量:3在/home/ilian/Desktop/SERVER/ex4.php在线5 并在我的第5行是for循环初始化。所以我得到的PHP可能会混淆,因为不知道它在该阵列中检查TRUE的变量是什么类型,因为它可以是 “Array”,“HELLO”,“MESS”,50,长度是4,这是正确的,但是在我aam检查一个简单的字符串的长度的情况。任何随和的解释?

+1

你知道函数['strlen'](http://php.net/strlen),对吧? – deceze 2012-01-28 10:18:26

回答

4

问题是,在某些时候,您的条件$str[$len])将尝试访问超出字符串末尾的偏移量。这是你的停止条件,但是停止条件会引发通知,因为访问未定义的偏移量被认为是错误的(正确如此)。您需要检查是否存在使用isset($str[$len])的偏移量,该偏移量不会发出通知。

+0

很好的触摸@deceze我刚刚读了关于isset空和未设置的foos,似乎他们正在做修复......但是有没有其他的东西来检查字符串的末尾像C的“\ 0”或EOF或NULL还是? – 2012-01-28 10:30:15

+0

@Ilian号PHP字符串是字节数组,不是'NUL'终止的内存区域。 – deceze 2012-01-28 11:16:40

0

您不必编写一个函数来得到一个字符串的长度,PHP有这个建于您在数个内部功能:

  1. strlen - 一个字符串长度
  2. mb_strlen - 在对象项的阵列或计数的长度

如果所有 - 其可以在其内

  • count具有多字节字符的字符串的长度你需要计算一个字符串的长度,使用strlen,对于使用count的数组。比滚动自己好得多。

  • +0

    不完全...我需要一个字符串长度检查的自定义版本。 – 2012-01-28 10:30:56