LoginSignup
20
15

More than 5 years have passed since last update.

連想配列の中身が空かどうかを確認する。wondaの備忘録

Last updated at Posted at 2015-10-04

フォームのエラー判定で何か問題あれば
$err[ ]にメッセージをつめていくプログラムの場合
連想配列の中身がすっかり空なのか(この場合次のページへいく流れ)
どうかの判定には少し工夫が必要。

初心者用に実験結果と解決法を残しておきます。

\$var =[ ];//$varを配列に初期化

Aパターン
\$var{'a']="blue";
\$var['b']=" ";
$var['c']="red";

Bパターン
\$var['a']=" ";
\$var['b']=" ";
\$var['c']=" ";

いろいろ実験してみます。
・実験1
print_r ($var);
結果
Aパターン
Array ( [a] => blue [b] => [c] => red )

Bパターン
Array ( [a] => [b] => [c] => )

・実験2
if(empty ($var['a'])){
print '空です';
}else{
print '入ってます';}

Aパターンのみ
結果
入ってます

・実験3
if(empty ($var['b'])){
print '空です';
}else{
print '入ってます';}

Aパターンのみ
結果
空です

・実験4
if(empty ($var)){
print '空です';
}else{
print '入ってます';}

Aパターン
結果
入ってます

Bパターン
結果
入ってます

※Bパターンでは配列の中身は空なのにemptyではないと判定されてしまう。(issetでは中身があると判断される)
これは$varという箱の中に、もっと小さな箱a,b,cが入っていますよ、という反応。
これでは配列の中身が空かどうか調べられない。

emptyとは箱の中になにも入ってない状態なので
配列もセットされていてはならない。
ならば連想配列が空の場合、一端それ自体削除してから判定すればよい。
空の連想配列を削除する関数はarray_filter
今回でいうとAパターンの$var['b']なんかはこの関数で
取り除いてくれる

・実験5
print (array_filter($var);
結果 Aパターン
Notice: Array to string conversion in ~
おう?ああ、そうだ。print には配列を渡してはいけないだった。
配列の中身を表示する関数はprint_r

・実験6
print_r (array_filter($var));

結果
Aパターン
Array ( [a] => blue [c] => red )
Bパターン
Array ( )

うむ、うまくいきました。

ということで
連想配列の中身が空かどうかを確認するためのプログラムは
こちら

:bulb: ・実験7
\$judge = array_filter(\$var);
//一番肝心なところでバグがおきてますね。ジャッジと名づけた箱にアレイフィルターを通した配列を入れてます。
if(empty($judge)){
print '空だよ';
}else{
print '安心してください。入ってます。';}

array.jpg

結果 
Aパターン
安心してください。入ってます。

Bパターン
空だよ

以上、覚書として残しておきます。

追記
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
コメントでご指摘いただいて修正です。

エラーがある場合配列にエラーメッセージを格納する。
エラーがある場合、再びフォームに戻す、のような場合
これだけで十分でした。
a.jpg

{ }の中は例です。
エラーがなかった場合のプログラムを書きます。

いや~、非常に簡潔です。

20
15
9

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
15