我试图在不使用库函数的情况下计算字符串的长度(用于学习目的)。我使用以下代码:
<?php
$name = "Mohammad Umar";
$i=0;
while($name[$i] != ''){
$i++;
}
echo $i++;
?>
但我得到的错误是这样的:
注意:未初始化的字符串偏移量:13英寸 第4行的C:\ xampp \ htdocs \ form \ test.php
我已经初始化了$ i,那为什么它会说未初始化的字符串偏移?有没有更好的方法来计算没有库函数的字符串的长度,请建议我。
答案 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);
另一个解决方案是执行正则表达式/.+/
并计算输出数组。但这只是简单的...... ....
但它会起作用。
答案 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
的未初始化偏移量。