我在计算字符串的长度时遇到错误

时间:2017-08-18 16:33:25

标签: php

我试图在不使用库函数的情况下计算字符串的长度(用于学习目的)。我使用以下代码:

<?php 
$name = "Mohammad Umar";
$i=0;
while($name[$i] != ''){
    $i++;
}
echo $i++;
?>

但我得到的错误是这样的:

  

注意:未初始化的字符串偏移量:13英寸   第4行的C:\ xampp \ htdocs \ form \ test.php

我已经初始化了$ i,那为什么它会说未初始化的字符串偏移?有没有更好的方法来计算没有库函数的字符串的长度,请建议我。

5 个答案:

答案 0 :(得分:5)

不使用strlen函数就可以执行此操作

$name = "Mohammad Umar";
$i=0;
while(isset($name[$i])){
    $i++;
}

答案 1 :(得分:2)

您可以使用str_split将字符串拆分为数组并对其进行计数。

$name = "Mohammad Umar";
$arr = str_split ($name);
echo count($arr);

https://3v4l.org/OIDlt#output

另一个解决方案是执行正则表达式/.+/并计算输出数组。但这只是简单的...... .... 但它会起作用。

答案 2 :(得分:1)

你可以简单地使用php strlen function

<?php 
$name = "Mohammad Umar";
echo strlen($name);
?>

您收到错误,因为您编写的代码$name[13]此部分的代码不存在。您可以从[0]转到[12]

修改

请注意,您无法使用strlen

然后为什么不检查它是否存在

while(isset($name[$i]){
    $i++;
}

答案 3 :(得分:1)

另外两种方式:两个函数都使用substr(),第一个使用while()循环,第二个是递归

function stringLen1($string)
{
    $result = 0;
    while ($string != '') { // note: loose typing
        $string = substr($string,1);
        $result++;
    }
    return $result;
}

function stringLen2($string)
{
    if ($string == '') { // note: loose typing
        $result = 0;
    } else {
        $result = stringLen2(substr($string,1)) + 1;
    }
    return $result;
}

$name = "Mohammad Umar";
echo stringLen1($name)."<br />\n";

echo stringLen2($name)."<br />\n";

答案 4 :(得分:0)

for循环也适用于此。

for ($i = 0; isset($name[$i]); $i++);

echo $i;

解决您的问题:

  

“我已经初始化了$ i,那么为什么它会说未初始化的字符串偏移?”

这并不意味着变量$i未初始化。这意味着$i(13)的值是$name的未初始化偏移量。