web-dev-qa-db-ja.com

PHPを使って配列が空かどうか調べる方法は?

playersは、空か、カンマ区切りのリスト(または単一の値)のいずれかです。空かどうかを確認する最も簡単な方法は何ですか? $gameresult配列を$gamerowにフェッチしたらすぐにそれができると思いますか?この場合、$playerlistが空の場合は展開しないことがおそらくより効率的になりますが、引数として、配列が空であるかどうかをどのように確認するのでしょうか。

$gamerow = mysql_fetch_array($gameresult);
$playerlist = explode(",", $gamerow['players']);
391
aslum

配列に要素があるかどうかだけを確認する必要がある場合

if (empty($playerlist)) {
     // list is empty.
}

チェックする前に空の値を消去する必要がある場合(通常、変な文字列のexplodeingを防ぐために行われます):

foreach ($playerlist as $key => $value) {
    if (empty($value)) {
       unset($playerlist[$key]);
    }
}
if (empty($playerlist)) {
   //empty array
}
634
Tyler Carter

空の配列はPHPでは間違っているので、他の人が示唆しているようにempty()を使う必要すらありません。

<?php
$playerList = array();
if (!$playerList) {
    echo "No players";
} else {
    echo "Explode stuff...";
}
// Output is: No players

PHPの empty() は、変数が存在しないか偽の値を持つかを決定します(array()0nullfalseなど).

ほとんどの場合は!$emptyVarをチェックするだけです。変数が設定されていない可能性があり、E_NOTICEをトリガーしたくない場合はempty($emptyVar)を使用してください。 IMOこれは一般的に悪い考えです。

133
Cobby

まともな答えがいくつかありますが、PHPが配列が空かどうかを判断するときに、もっと明確に説明するために少し拡張したいと思いました。


主な注意事項

キーを持つ配列は 空ではない とPHPによって決定されます。

配列値にはキーが存在する必要があるので、値があるかどうかは、キーがない(そして値がない)場合のみ、空であるかどうかは判断されません。

そのため、empty()で配列をチェックしても、単に値があるかどうかがわかりません。配列が空で、キーが配列の一部であるかどうかがわかります。


そのため、どのチェック方法を使用するかを決定する前に、配列の作成方法を検討してください。
[/。] EG各フォームフィールドに配列名(つまりname="array[]")があるときにユーザーがHTMLフォームを送信すると、配列がキーを持ちます。
各フォームフィールドの配列には自動インクリメントされたキー値があるため、 空でない 配列が各フィールドに生成されます。

例としてこれらの配列を取ります:

/* Assigning some arrays */

// Array with user defined key and value
$ArrayOne = array("UserKeyA" => "UserValueA", "UserKeyB" => "UserValueB");

// Array with auto increment key and user defined value
// as a form field would return with user input
$ArrayTwo[] = "UserValue01";
$ArrayTwo[] = "UserValue02";

// Array with auto incremented key and no value
// as a form field would return without user input
$ArrayThree[] = '';
$ArrayThree[] = '';

上記の配列の配列のキーと値をエコーアウトすると、次のようになります。

アレイ1:
[UserKeyA] => [UserValueA]
[UserKeyB] => [UserValueB]

アレイ2:
[0] => [UserValue01]
[1] => [UserValue02]

アレイ3:
[0] => []
[1] => []

そしてempty()を使って上記の配列をテストすると、以下の結果が返されます。

アレイ1:
$ ArrayOneは空ではありません

アレイ2:
$ ArrayTwoは空ではありません

アレイ3:
$ ArrayThreeは空ではありません

次のように、配列を割り当てると配列は常に空になりますが、それ以降は使用しません。

$ArrayFour = array();

これは空になります。つまり、上記のif empty()を使うとPHPはTRUEを返します。

そのため、フォームに入力名などでキーがある場合、または手動でキーを割り当てた場合(データベースの列名をキーとして、データベースからの値やデータがない配列を作成した場合など)、配列はempty()にはなりません。

この場合、foreachで配列をループして、各キーに値があるかどうかをテストできます。あなたがとにかくキーをチェックしたりデータをサニタイズしたりして、とにかく配列を通過する必要がある場合、これは良い方法です。

ただし、単に「値が存在するかどうか」を知る必要がある場合は、 _ true _ または _ false _ を返すのが最善の方法ではありません。キーがあることがわかっているときに配列に値があるかどうかを判断するには、さまざまな方法があります。関数やクラスが最善の方法かもしれませんが、いつものようにそれはあなたの環境や正確な要件、そしてあなたが現在何をしているとしてもあなたが現在行っていることのような他のことに依存します。


これは、配列に値があるかどうかを確認するためにごくわずかなコードを使用するアプローチです。

array_filter()を使う:
配列内の各値をコールバック関数に渡して繰り返します。コールバック関数がtrueを返すと、arrayの現在の値が結果の配列に返されます。配列キーは保持されます。

$EmptyTestArray = array_filter($ArrayOne);

if (!empty($EmptyTestArray))
  {
    // do some tests on the values in $ArrayOne
  }
else
  {
    // Likely not to need an else, 
    // but could return message to user "you entered nothing" etc etc
  }

この回答の最初のコードブロックで作成された3つのサンプル配列すべてでarray_filter()を実行すると、次のようになります。

アレイ1:
$ arrayoneは空ではありません

アレイ2:
$ arraytwoは空ではありません

アレイ3:
$ arraythreeは空です

キーがあるかどうかにかかわらず、値がない場合は、array_filter()を使用して新しい配列を作成し、新しい配列が空かどうかを確認して、元の配列に値があるかどうかを確認します。
これは理想的ではなく面倒なことではありませんが、巨大な配列があり、他の理由でそれをループ処理する必要がない場合は、必要なコードの点でこれが最も単純です。


オーバーヘッドのチェックには慣れていませんが、値が見つかった場合のarray_filter()チェックとforeachチェックの使用の違いを知っておくとよいでしょう。

明らかに、ベンチマークはさまざまなパラメータ、小規模および大規模配列、そして値がある場合などには必要です。

72
James

count($gamerow['players']) は0になります。

テストしている変数が実際には明示的に空の配列であるかどうかを確認したい場合は、次のようにします。

if ($variableToTest === array()) {
    echo 'this is explicitly an empty array!';
}
9
Tim Ogilvy

なぜ誰もこの答えを言っていません:

$array = [];

if($array == []) {
    // array is empty
}
6
Rob
is_array($detect) && empty($detect);

is_array

6
zloctb

あなたが使用することができる配列の内容を確認するのであれば:

$arr = array();

if(!empty($arr)){
  echo "not empty";
}
else 
{
  echo "empty";
}

ここを参照してください: http://codepad.org/EORE4k7v

4
nothingchen01

empty()の使用が失敗する誤ったまたは空の行(0 => ''など)を除外したい場合は、次のことを試すことができます。

if (array_filter($playerlist) == []) {
  // Array is empty!
}

array_filter() :コールバックが指定されていない場合、FALSEに等しい配列のすべてのエントリ(booleanへの変換を参照)が削除されます。

NULL、FALSE、空の文字列('')をすべて削除したいが、値をゼロ(0)のままにしたい場合は、コールバックとしてstrlenを使用できます。

$is_empty = array_filter($playerlist, 'strlen') == [];
4
kenorb

私はこのコードを使います

$variable = array();

if( count( $variable ) == 0 )
{
    echo "Array is Empty";
}
else
{
    echo "Array is not Empty";
}

ただし、配列に多数のキーがある場合、このコードでは、他の答えと比較して、キーのカウントに時間がかかります。

3
empty($gamerow['players'])
3
Dan McGrath
 $gamerow = mysql_fetch_array($gameresult);

if (!empty(($gamerow['players'])) {
   $playerlist = explode(",", $gamerow['players']);
}else{

  // do stuf if array is empty
}
3
Anish Rai

array_filter()を使うことができます。これはあらゆる状況に最適です。

$ray_state = array_filter($myarray);

if (empty($ray_state)) {
    echo 'array is empty';
} else {
    echo 'array is not empty';
}
2
user889030

配列が空かどうかを判断する最良の方法は、count()を次のように使用することです。

if(count($array)) {
    return 'anything true goes here';
}else {
    return 'anything false'; 
}
0
Anas Red

私の意見では、インデックス付き配列の最も簡単な方法は、単純に次のようになります。

    if ($array) {
      //Array is not empty...  
    }

配列の 'if'条件は、配列が空でない場合はtrueおよび配列が空の場合はfalseと評価されます。これは連想配列に適用できるnotです。

0
PJately

これはすべてのケースでうまくいっているようです

if(!empty(sizeof($array)))
0
Madhu Nair