人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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 }

●質問者: php-beginner
●カテゴリ:インターネット ウェブ制作
✍キーワード:PHP test スマート 定義 配列
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● y-kawaz
●35ポイント

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

<?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


2 ● tezcello
●35ポイント

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

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


3 ● kn1967
●10ポイント ベストアンサー

値の入っている要素の数を数えてゼロならば全て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";
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ