電子書籍の厳選無料作品が豊富!

PHP初心者です。
配列要素数を数えるcount()ですが納得いきません。
たとえば、

$myArray = array();
$myArray[0] = NULL;
print count($myArray);

とすると「1」となります。
NULL まで数えなくてもいいのに…
NULLを数えたくないならどんな方法があるでしょうか?
お詳しい方、よろしくお願いいたします。

A 回答 (6件)

NULLとは「何も入っていない状態」ではなく、


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

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

お礼日時:2007/06/27 00:25

訂正


$myArrayを[0]

$myArray[0]を
    • good
    • 0

4です。

間違った事書いてました。
count()配列要素数を数える関数。

引数の渡し方によって数えるものが違うようです。

count($myArray)
この場合、$myArrayを構成する要素は、$myArray[0]
なので1が返ってきます。

count($myArray[0])
この場合、$myArrayを[0]構成する要素は、何もない
ので0が返ってきます。
    • good
    • 0

count() 配列数を数える関数


strlen() 文字数を数える関数

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

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;
}
//---------------------------
こんな関数を作ってみてはどうでしょうか。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/06/27 00:23

がると申します。


んと…

$myArray[0] = NULL;
この場合。
正しくは「配列の0番目の要素にデータとしてNULLが入っている」状態です。
なので、「配列の数としては」1が返るのが正常な動作になります。

もし「データとしてNULL(や空文字など)が入っていた場合はカウントしたくない」ようであれば、
・まず配列からNULLなどの要素をとりのぞく
・countににた別の関数(かクラス)を自作する
必要があるかと思います。

後は「データの格納部分でNULLなら格納しないようにする」のも手です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/06/27 00:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!