• ベストアンサー

【PHP】count( )の結果に納得がいかない

PHP初心者です。 配列要素数を数えるcount()ですが納得いきません。 たとえば、 $myArray = array(); $myArray[0] = NULL; print count($myArray); とすると「1」となります。 NULL まで数えなくてもいいのに… NULLを数えたくないならどんな方法があるでしょうか? お詳しい方、よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.3

NULLとは「何も入っていない状態」ではなく、 「NULLという値が入っている状態」であることが理解できれば、 count()が返してくる値が決して理不尽ではないことが おわかりいただけると思います。

takosuke88
質問者

お礼

NULL で存在をなくすことはできない… よくわかりました。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (5)

  • SoHeart
  • ベストアンサー率50% (13/26)
回答No.6

訂正 $myArrayを[0] ↓ $myArray[0]を

すると、全ての回答が全文表示されます。
  • SoHeart
  • ベストアンサー率50% (13/26)
回答No.5

4です。間違った事書いてました。 count()配列要素数を数える関数。 引数の渡し方によって数えるものが違うようです。 count($myArray) この場合、$myArrayを構成する要素は、$myArray[0] なので1が返ってきます。 count($myArray[0]) この場合、$myArrayを[0]構成する要素は、何もない ので0が返ってきます。

すると、全ての回答が全文表示されます。
  • SoHeart
  • ベストアンサー率50% (13/26)
回答No.4

count() 配列数を数える関数 strlen() 文字数を数える関数 この場合、$myArray[0]が存在するので「1」 strlen($myArray[0])はNULLを数えず0を返します。

すると、全ての回答が全文表示されます。
回答No.2

countは配列の要素数を数えるものであって、配列の中身を数えるものではありません。 $myArray[0] = NULL; とは、別の書き方をすると、 $myArray = array("0"=>); と同じ意味(ゼロと言うインデックスが存在します)です。 同じように、 $myArray[0] = NULL; $myArray[1] = "あいうえお"; だとしたら、 $myArray = array("0"=>,"1"=>"あいうえお"); となります。この配列をcountすれば2を返しますよね。 配列をインデックスごと無くす場合は、NULLではなく、unset($myArray[0])とする必要があります。 NULLがどうしても入ってしまい、NULLを数えたくないなら、 //--------------------------- function count_notnull ($myArray){ $cnt = count($myArray); $t=0; for($i=0:$i<$cnt;$i++){ if($myArray[$i] != "") $t++; } return $t; } //--------------------------- こんな関数を作ってみてはどうでしょうか。

takosuke88
質問者

お礼

やっぱunset()ですか。 考えを切り替えてみます。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • galluda
  • ベストアンサー率35% (440/1242)
回答No.1

がると申します。 んと… $myArray[0] = NULL; この場合。 正しくは「配列の0番目の要素にデータとしてNULLが入っている」状態です。 なので、「配列の数としては」1が返るのが正常な動作になります。 もし「データとしてNULL(や空文字など)が入っていた場合はカウントしたくない」ようであれば、 ・まず配列からNULLなどの要素をとりのぞく ・countににた別の関数(かクラス)を自作する 必要があるかと思います。 後は「データの格納部分でNULLなら格納しないようにする」のも手です。

takosuke88
質問者

お礼

なるほど。 NULL = 何もない という考えが間違いでしたか。 ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A