2011-06-24 7 views
11

文字列は文字の配列ですが、正しいですか?もしそうなら、count()は文字列にstrlen()と同じ結果をもたらさないのはなぜですか?PHP - なぜcount()が文字列のstrlen()のように動作しないのですか?

+15

PHPはあなたが望むように常に意味があるわけではありません;-) –

+0

@Matt Ellenそれはどんなlangでも同じです異なるタスクのために異なる機能がある理由を知りませんか? – Raoul

+0

@Raoul:何が同じですか?異なるタイプにはそれぞれ異なる機能がありますか?確かに、しかし、いくつかの言語では、文字のリスト/配列と他のもののリスト/配列は同じように扱うことができます。 –

答えて

15

文字列は、C、C++、Javaの文字の配列です。 PHPでは、そうではありません。 PHPは非常に緩やかな言語であることを覚えておいてください。あなたは[]セレクタでPHP文字列から文字を得ることができますが、まだそれを配列にしていません。

+0

言語がそれをするとき、私はそれが嫌いです。配列の表記法を見ると、私は自動的に実際の配列で作業していると思います。 PHPマニュアルで「インデクサを持っていても配列は文字列ではありません」と明示的には言及していません。 –

+0

文字列が配列と同じ言語はごくわずかです。おそらくC言語ではあるかもしれませんが、より高いレベルのプログラミング言語は文字列に対して特別な構造を持っています。同様に、C++では、std :: stringは配列のようにアクセスできますが、 'sizeof(std :: string)'は長さを与えません。正しい職場に適したツールを使用してください。 –

3

count()は、Arrayのエントリ数をカウントします。

$test = array(1,2,3); 
echo count($test); 

出力:3

なぜあなたはstringstrlen()が行うことができたときにその上count()を使いたいでしょうか?あなたの入力がstringarrayかわからないのですか?次に、is_array()を使用して確認します。

+1

はい、私は知っています。文字列が文字の配列であれば、count()はその文字列の文字数を返すべきです。 –

+0

英語の文字列を文字列と呼びますが、PHPでは文字配列ではなく文字列です。 – Kokos

+1

Kokosでは、PHPで文字列が通常の配列と同じように扱われない理由についての質問があります。たとえば、Haskellは文字列を文字のリストとして扱うので、Haskellのすべてのリスト関数を文字列に使うことができます。 –

0

count配列の要素数を取得すると、srtlenは文字列の長さを取得します。これはドキュメントである:

http://php.net/manual/en/function.strlen.php

+0

はい、私は知っています。私はそれがなぜそうであるか尋ねていた。 –

+0

@ kevinmajor1もう一度読むと、これはドキュメントに記載されています。 – Raoul

+0

私はドキュメントを読んだ。彼らは、私が望んでいたように、問題について明確ではなかった。文字列が実際に文字配列であるとすぐに思った理由について、上記の私のコメントを見てください。 –

19

それがオブジェクトである場合を除き、countアレイに引数をキャストし、

count((array) "example") 
= count(array("example")) 
= 1 
+0

優れた答え! – CoR

+0

この回答は、「配列ではない」回答よりもはるかに優れており、正解です。 – person27

0

カウントがそのカウントをstrlenを配列値の数 のためのよりpreferabalyユーザーです.....

1

文字列が特定のプログラミング言語によって内部的にどのように処理されているかを、必ずしも "関連する"データ型と同等に扱うことを意味するものではありません。 PHPがCではないので、同じ特徴を持っていません。

1

文字列は単なる一連の文字であり、countは配列内の要素数を数えます。

$ string [$ index];を使用しています。あなたはN番目の文字を見つけるのに役立つちょっと事のそのわずかショートカット、

あなたはおそらくstrlen

を何ので、今日のためのレッスンが

のカウント==配列の長さ

です count(explode('',$string));を使用することができます

strlen ==文字列の長さ

関連する問題