PHPの配列に関しての質問です。


下記のような要素が定義されていて全ての要素が空かどうかをスマートに調べる方法を探しています。


var_dump($test);

array(10) { [1]=> NULL [2]=> NULL [3]=> NULL [4]=> NULL [5]=> NULL [6]=> NULL [7]=> NULL [8]=> NULL [9]=> NULL [10]=> NULL }

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2009/04/23 08:27:27
  • 終了:2009/04/30 08:30:02

ベストアンサー

id:kn1967 No.3

kn1967回答回数2915ベストアンサー獲得回数3012009/04/23 16:52:06

ポイント10pt

値の入っている要素の数を数えてゼロならば全てNullと判定するというのはいかが?

count(array_count_values($test))

PHP: array_count_values - Manual


動作確認用

# 数値が入っている
$test = array(null,null,null,null,100,null,null,null,null,null);
echo count(array_count_values($test)) . "<br />\n";
# 全部null
$test = array(null,null,null,null,null,null,null,null,null,null);
echo count(array_count_values($test)) . "<br />\n";
# 数値とテキストが入っている
$test = array(null,null,null,100,null,null,'text',null,null,null);
echo count(array_count_values($test)) . "<br />\n";
# 数値と空文字列が入っている
$test = array(null,null,null,100,null,null,'',null,null,null);
echo count(array_count_values($test)) . "<br />\n";
# 空文字列が入っている
$test = array(null,null,null,null,null,null,'',null,null,null);
echo count(array_count_values($test)) . "<br />\n";

その他の回答(2件)

id:y-kawaz No.1

y-kawaz回答回数1421ベストアンサー獲得回数2262009/04/23 11:25:16

ポイント35pt

いくつか試してみました。

<?php
//ループしてチェック
function is_all_null1($arr) {
        foreach($arr as $v)
                if($v !== null)
                        return false;
        return true;
}

//ユニークして配列演算子で比較
function is_all_null2($arr) {
        //$arr==array()の時にfalseになってしまうのでボツ
        //return array_unique($arr) === array(null);

        //苦肉の修正… →連想配列の時に使えないことが判明してボツ
        //return array_unique(array_merge($arr, array(null))) === array(null);

        //もうグダグダです(--;
        return array_unique(array_merge(array_values($arr), array(null))) === array(null);
}

//is_nullフィルタして元の配列と配列演算子で比較
function is_all_null3($arr) {
        return array_filter($arr, "is_null") === $arr;
}

$test1 = array(null, null, null, null);
$test2 = array(null, 1, null, null);
$test3 = array();
$test4 = array("aa"=>null, null);
?>
[<?=is_all_null1($test1)?>:<?=is_all_null1($test2)?>:<?=is_all_null1($test3)?>:<?=is_all_null1($test4)?>]
[<?=is_all_null2($test1)?>:<?=is_all_null2($test2)?>:<?=is_all_null2($test3)?>:<?=is_all_null2($test4)?>]
[<?=is_all_null3($test1)?>:<?=is_all_null3($test2)?>:<?=is_all_null3($test3)?>:<?=is_all_null3($test4)?>]

[1::1:1]
[1::1:1]
[1::1:1]

これくらいしか思いつきませんでした…。

シンプルさでは3番目が一番でしょうか?

ifの中に直接書くとかでなく関数にするなら、分かりやすさで1番目が好きです。

PHP: 配列演算子 - Manual

id:tezcello No.2

tezcello回答回数460ベストアンサー獲得回数692009/04/23 12:51:29

ポイント35pt

var_export() で変数に書き出して、'NULL'という文字列を数えるのは?

http://jp.php.net/manual/ja/function.var-export.php

id:kn1967 No.3

kn1967回答回数2915ベストアンサー獲得回数3012009/04/23 16:52:06ここでベストアンサー

ポイント10pt

値の入っている要素の数を数えてゼロならば全てNullと判定するというのはいかが?

count(array_count_values($test))

PHP: array_count_values - Manual


動作確認用

# 数値が入っている
$test = array(null,null,null,null,100,null,null,null,null,null);
echo count(array_count_values($test)) . "<br />\n";
# 全部null
$test = array(null,null,null,null,null,null,null,null,null,null);
echo count(array_count_values($test)) . "<br />\n";
# 数値とテキストが入っている
$test = array(null,null,null,100,null,null,'text',null,null,null);
echo count(array_count_values($test)) . "<br />\n";
# 数値と空文字列が入っている
$test = array(null,null,null,100,null,null,'',null,null,null);
echo count(array_count_values($test)) . "<br />\n";
# 空文字列が入っている
$test = array(null,null,null,null,null,null,'',null,null,null);
echo count(array_count_values($test)) . "<br />\n";

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません