質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

4回答

3365閲覧

配列が空か否かの真偽判定

SugiuraY

総合スコア318

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/03/13 08:00

お世話になります。

配列が空か否かの判定について通常emptyを使用すると思いますが
以下のような多次元配列で最後の配列の要素が全体として存在するか否かを判定するsmartな方法はございませんでしょうか?

宜しくお願い申しあげます。

PHP

1Array 2( 3 [A] => Array 4 ( 5 ) 6 7 [B] => Array 8 ( 9 ) 10 11) 12 13//例 14empty -> false 15Array 16( 17 [A] => Array 18 ("apple" 19 ) 20 21 [B] => Array 22 ( 23 ) 24 25) 26 27empty -> true 28Array 29( 30 [A] => Array 31 ( 32 ) 33 34 [B] => Array 35 ( 36 ) 37 38) 39 40

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2017/03/13 08:13

「多次元配列」と書いていますが、「2次元」以外に変動することも考えないといけない、という状況でしょうか。
SugiuraY

2017/03/13 08:28

コメントありがとうございます。現状は、必ず2次元となります。
guest

回答4

0

array_walk_recursive()で処理してはどうでしょうか?

以下空ではない配列が一つでもあると$countが正の整数になります

PHP

1$count=0; 2$a=[ 3 "A"=>["apple"], 4 "B"=>[], 5]; 6array_walk_recursive($a,function($x) use(&$count){$count=count($x);}); 7print $count;

PHP

1$count=0; 2$b=[ 3 "A"=>[], 4 "B"=>[], 5]; 6array_walk_recursive($b,function($x) use(&$count){$count=count($x);}); 7print $count;

PHP

1$count=0; 2$c=[ 3 "A"=>[], 4 "B"=>[], 5 "C"=>[ 6 "D"=>[], 7 "E"=>[], 8 "F"=>[ 9 "G"=>[] 10 ], 11 ], 12]; 13array_walk_recursive($c,function($x) use(&$count){$count=count($x);}); 14print $count;

投稿2017/03/13 08:21

yambejp

総合スコア114892

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SugiuraY

2017/03/13 08:29

コメント有難うございます。なるほど、再帰的にcountするのですね、解決いたしました!
guest

0

ベストアンサー

php

1function is_array_empty($InputVariable) { 2 $result = true; 3 4 if (is_array($InputVariable) && count($InputVariable) > 0) { 5 foreach ($InputVariable as $Value) { 6 $result = $result && is_array_empty($Value); 7 } 8 } else { 9 $result = empty($InputVariable); 10 } 11 12 return $result; 13}

参考: http://stackoverflow.com/questions/4014327/best-way-to-check-a-empty-array

投稿2017/03/13 08:15

編集2017/03/13 08:30
Everatch

総合スコア241

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SugiuraY

2017/03/13 08:31

非常にクリアで分かりやすかったです!有難うございます。
guest

0

yambejpさん、array_walk_recursive があるんですね、勉強になります。
上の回答を元に array_walk_recursive を利用した判定関数もつくりましたのでご参考までに。

php

1function is_array_empty($InputVariable) { 2 $result = true; 3 4 if (is_array($InputVariable)) { 5 array_walk_recursive($InputVariable, function($item) use (&$result) { 6 $result = $result && empty($item); 7 }); 8 } else { 9 $result = empty($value); 10 } 11 12 return $result; 13}

投稿2017/03/13 08:28

編集2017/03/13 08:30
Everatch

総合スコア241

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SugiuraY

2017/03/13 08:32

追加でコメントを頂き有難うございます。 array_walk_recursiveでも求める結果を得ることができました。 宜しくお願い申し上げます。
guest

0

          

投稿2017/03/13 08:15

編集2017/03/13 08:20
Clor

総合スコア883

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Everatch

2017/03/13 08:21 編集

再帰的に作るだけで多次元にも対応できますよ! それと、$parent_array が array であることが保証されて居ないので、count() を利用する前に is_array() でチェックして方が良いかと!
Clor

2017/03/13 08:20

そもそも想定する結果が出ていなかったので削除します汗
SugiuraY

2017/03/13 08:30

Clorさん、コメントに御礼申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問