- 更新日: 2019年04月26日
- 公開日: 2019年04月23日
[PHP初心者必見]empty関数を使う目的から使い方まで徹底解説!
【はじめに】
今回は、 empty関数を解説します。
empty関数がわかるようになると、
* 変数の存在のチェックをする処理
がわかるようになります。
ここでは、基本的な利用の仕方として
- empty関数を使う目的
- empty関数の使い方
- empty関数の書き方
- 具体例(存在しない)
- 具体例(数値)
- 具体例(文字列)
- 具体例(配列)
を説明します。
加えて、
- empty関数の書き方
- isset関数との違い
を説明します。
empty関数を使う目的
empty関数は、引数に与えた変数や配列の中身が空かどうか確認するために利用します。
これからempty関数を使って変数の中身が空かどうか確認する方法を説明していきます。また、同様な関数として、isset関数があります。empty関数とisset関数の違いについても説明します。
empty関数の使い方
empty関数は、結果によって、TRUEかFALSEを返します。
変数の値が0あるいは空、NULLである場合はTRUEを、それ以外である場合はFALSEを返します。
つまり、存在しない場合や値がない場合に、TRUEを返します。
empty関数の書き方
empty(空かどうかの確認を行う配列、変数)
戻り値の説明
empty関数がTRUEを返す時:
引数に指定した変数や配列が存在していない時
引数に指定した変数の値が設定されていない時、もしくはNULLの値の時
引数に指定した数値の0や文字列の半角の”0″やFALSEの値の時
引数に指定した配列が存在し、要素を1つも持たない時
これ以外は、empty関数はFALSEを返します。
具体例(存在しない)
empty関数の引数として指定された変数が存在していない場合の例:
<?php
if( empty($var) ){
echo '変数「$var」は0あるいは空です';
}
?>
実行結果:
変数「$var」は0あるいは空です
プログラムの説明:
empty関数の引数として、変数$varが指定されています。
empty関数で使用される以前に変数$varに対しての値の代入は行われていません。
よって、変数$varは存在しないまま、empty関数の引数として利用されています。
そのため、プログラムの実行結果として画面には、 変数「$var」は0あるいは空です と表示されます。
具体例(数値)
変数が数値である場合の例です。
<?php
$var = 0;
if( empty($var) ){
echo '変数「$var」は0あるいは空です';
}
?>
実行結果:
変数「$var」は0あるいは空です
プログラムの解説
このプログラムでは、
$var = 0;
と変数$varに数値0が代入されています。
したがって、empty関数の結果はTRUEとなります。
そのため、プログラムの実行結果として画面には、
変数「$var」は0あるいは空です
と表示されます。
しかし、
$var = 5;
のように変数$varに5などの0ではない数値が代入された場合はempty関数の結果はFALSEとなります。
そのようにプログラムを変更し、実行した場合には、実行結果としては、画面には何も表示されません。
具体例(文字列)
以下は、変数が文字列である場合の例です。
<?php
$str = "";
if( empty($str) ){
echo '文字列「$str」は0あるいは空です';
}
?>
実行結果:
文字列「$str」は0あるいは空です
プログラムの解説
このプログラムでは、変数$strを定義し、
$str = "";
を行っています。
これは、変数$strに空の文字列を代入ていることを意味しています。
次にempty関数で変数の中身が空であるかを判定しています。
この場合empty関数の結果がTRUEとなります。
そのため、プログラムの実行結果として画面には、
文字列「$str」は0あるいは空です
の文字列が出力されます。
ここで
$str = “123";
のように変数$strに文字列が格納されている場合はempty関数の戻り値はFALSEとなります。
そのようにプログラムを変更し、実行した場合には、実行結果としては、画面には何も表示されません。
また、変数$strに代入されている文字列が空ではなく半角の0が代入されている時もempty関数の戻り値はTRUEになります。
変数に半角の0が代入されている時の例
<?php
$str = "0";
if( empty($str) ){
echo '文字列「$str」は0あるいは空です';
}
?>
実行結果:
文字列「$str」は0あるいは空です
プログラムの解説
このプログラムでは
$str = "0";
というように変数$strには空白ではなく半角数字の0が代入されています。
この場合でもempty関数の戻り値はTRUEとなります。
そのため、プログラムの実行結果として
文字列「$str」は0あるいは空です
の文字列が画面に出力されます。
具体例(配列)
<?php
$arr = [];
if( empty($arr) ){
echo('配列「$arr」は空です');
}
?>
実行結果:
配列「$arr」は空です
プログラムの解説
このプログラムでは
$arr = [];
というように変数$arrは配列として定義はされていますが、要素としてはなにも代入されていません。そのため、empty関数の戻り値はTRUEとなります。
そのため、プログラムの実行結果として
配列「$arr」は空です
の文字列が画面に出力されます。
このとき、
$arr = [];
の後で
$arr[0] = ‘a’;
というように要素を設定する処理がある時には、配列$arrは空ではないので、empty関数の戻り値はFALSEとなります。
そのため、そのようにプログラムを変更し、実行した場合には、実行結果としては、画面には何も表示されません。
要素のある配列の例
<?php
$arr = [];
$arr[0] = 'a';
if( empty($arr) ){
echo('配列「$arr」は空です');
}
?>
実行結果:
(なにも出力されません)
isset関数との違い
isset関数でも変数や配列に値が代入されているかを確認することができます。
isset関数の戻り値について
isset関数は変数に値がセットされており、かつNULLでない時にTRUEを返します。
つまり、NULLの時にだけ、FALSEを返します。
empty関数とisset関数の違い
empty関数では、TRUEになる場合として、値がNULLであることの他に、0かどうかも含まれましたが、isset関数では対象となりません。
isset関数の使われ方
たとえば、isset関数は、配列が要素を持っているが、配列の要素が持つ値が、NULLかそうでないかを確認する場合に使用します。
empty関数を利用する場合には、要素の値が0 や文字列の0であってもTRUEとなります。
利用例
以下は、isset関数を使用して、配列の要素の値が、NULLでないことを判定するプログラムです。
foreach文を使ってループして配列の要素を1つ1つを取り出し、要素の値をチェックします。
<?php
$fruits = ['0', 0, NULL, 'banana', 'pineapple'];
foreach($fruits as $value){
if (isset($value)){
echo 'NULLではありません';
}else{
echo 'NULLです';
}
echo "<br>";
}
?>
実行結果:
NULLではありません
NULLではありません
NULLです
NULLではありません
NULLではありません
プログラムの説明
配列$fruitsの中が空かどうかをforeach文でループして要素を1つずつ判定します。
配列の中にNULLを値とする要素が存在するか調べたい場合は、if文の条件にisset関数を使って判定します。
配列$fruitsの要素の3番目が NULLです。そのため、実行結果の3番目だけが「NULLです」となります。
それ以外は「NULLではありません」となります。
これを empty関数を使った判別に変えると、プログラムは以下のようになります。
<?php
$fruits = ['0', 0, NULL, 'banana', 'pineapple'];
foreach($fruits as $value){
if (!empty($value)){
echo 'NULLではありません';
}else{
echo 'NULLや0です';
}
echo "<br>";
}
?>
実行結果:
NULLや0です
NULLや0です
NULLや0です
NULLではありません
NULLではありません
プログラムの説明
このプログラムでは、
if (!empty($value)){
というように
empty関数の前に「!」という論理演算の否定をつけています。
empty関数は、存在しないことや値を持たないことをTRUEとして返す関数です。
しかし、否定「!」があるため、empty関数の戻り値のTRUEやFALSEを逆転させてから、if文の条件判定に利用しています。
empty関数に対し、論理演算の否定があるので、「存在しないときにTRUE」という意味が「存在しないときにFALSE」となるようにしています。
これは、「存在するときはTRUE」と考えることができます。
実行結果の違いとしては、isset関数では、「NULLではありません」となっていた1番目と2番目が「NULLや0です」になっています。
【補足説明】
引数
引数とは、
「ひきすう」と読みます。
関数を実行するときに、関数の中で処理をするために、渡すデータのことを指します。
また、switch 文では、条件判定の case に値を渡すために記述します。
論理演算 否定
ある処理結果が TRUE となるときに、それに対して、論理演算として否定を行うと、FALSEとなります。
FALSEに対して、論理演算として否定を行うと、TRUEになります。
<?php
$a = FALSE;
if (!$a){
echo "TRUEです";
}else{
echo "FALSEです";
}
?>
このプログラムを実行した結果は、「TRUEです」となります。
変数$aには、 FALSEが代入されていますが、if文の条件として、「!$a」となっているため、変数$aの値が、否定となりTRUEとして処理されます。
【参考サイト】
PHP マニュアル
\Webサイト担当者としてのスキルが身に付く/
まとめ
empty関数とisset関数は、変数が存在していなかったり、値を持たない状態をどこまで厳密に判断するかによって、使い分けます。
例えば変数が存在しないことが考えられたり、NULL以外の空文字列や空配列が値として代入されることがあるときに、それらも「空」として判断する場合には、empty関数を使うと意図した結果となります。
しかし、変数の値がNULLではないことだけを判定すればよいという場合にはisset関数を利用します。
また、empty関数は、論理演算子の否定「!」と組み合わせて使うと、「存在するときはTRUE」という意味になり、プログラムの処理の流れを理解しやすくなります。
- この記事を書いた人
- 坂田 健一