2017-08-18 11 views
0

ライブラリ関数(学習目的)を使用せずに文字列の長さを計算しようとしています。私は、次のコードを使用しています:文字列の長さを計算中にエラーが発生します

お知らせ:初期化されていない文字列のオフセット:13 Cに:上の\ XAMPP \ htdocsに\形式の\ test.phpを

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

をしかし、私はこのようなエラーを取得しています4行目

私はすでに$ iを初期化していますが、なぜ初期化されていない文字列オフセットがありますか?ライブラリ機能を持たない文字列の長さを計算するより良い方法はありますか、私に教えてください。

+1

再帰的なのですか? – Dekel

+1

何?なぜstrlen($ name);? – Andreas

+0

はい、あなたは正しいです。私はインタビューでstrlenのない文字列の長さを計算するよう求められました。だから私は基本的に学習目的を求めている。 – Manish

答えて

5

が存在するならば、あなたはこの

$name = "Mohammad Umar"; 
$i=0; 
while(isset($name[$i])){ 
    $i++; 
} 
を行うことができ strlen

を使用することはできません読んで

1

あなたは$name[13]この部分のチェックを書いたコードがしかし、存在しないため、あなたは、単にあなたがエラーを受信して​​いるPHPのstrlen function

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

を使用することができます。 [0]から[12]に行くことができます。

編集

ちょうどあなたがチェックしていないなぜそれがSTRLEN機能を使用しない

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

上記のコメントを読む – Andreas

+0

'ライブラリ関数を使わずに文字列の長さを計算しようとしています。(目的を達成するために) –

+0

あなたのニーズに合わせて答えを更新しました。 –

2

str_splitを使用して文字列を配列に分割し、それを数えます。

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

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

別の解決策は、正規表現/.+/を行い、出力配列をカウントすることです。しかし、それはちょうど平野です....
しかし、それは動作します。

+0

それは私の代わりの解決策でした! +1 :-D –

0

forループもこれに対応できます。

"私はすでに、なぜ初期化されていない文字列のオフセットを言っている、$ Iを初期化した?":あなたの質問に対処するために

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

echo $i; 

変数$iが初期化されていないわけではありません。これは、$i(13)の値が$nameの未初期化オフセットであることを意味します。

1

2つのより多くの方法:両方の機能がsubstr()使用し、最初はwhile()ループを利用し、あなたが `strlen`機能を持っている場合は、これを必要とするのはなぜ目は

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"; 
関連する問題