PHPを使用して配列が空かどうかを確認する方法


471

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

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

2
count()、sizeof()、empty()は使用しないでください。空の配列はfalseを返します:if($ array){
Limitrof

回答:


774

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

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

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

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

2
空を使用しないでください。countが大きい配列の場合、実行に時間がかかります。
Dan McGrath、

1
できました。issetやその他のものを使用する必要がないという事実のために、それも変更しました。
タイラーカーター、

5
彼のコード例では、変数を設定するので、を使用する必要はありませんempty()
コビー

4
注意!if(!isset($emptyarray))ですfalseが、if(empty($emptyarray))リターンtrue。それは私を釘付けにしただけ
Kolob Canyon

161

PHPでは空の配列は誤っているためempty()、他の人が示唆しているように使用する必要さえありません。

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

PHPのは、empty()変数が存在しないか(のようなfalsey値を持っていないかどうかを判断しarray()0nullfalse、など)。

ほとんどの場合、確認したいだけです!$emptyVarempty($emptyVar)変数が設定されておらず、トリガーする必要がない場合に使用しますE_NOTICE。IMOこれは一般的に悪い考えです。


2
これが一部の標準で変更されないことを願っています...痛みを伴うでしょう
デビッドコンスタンティン

79

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


主な注意事項:

1つまたは複数のキーを持つ配列は、PHPによって空ではないと判断されます。

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

したがって、配列をチェックしても、empty()値があるかどうかだけではなく、配列が空であり、キーが配列の一部であるかどうかがわかります。


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

これらの配列を例にとります:

/* 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は空ではありません

ARRAY TWO:
$ ArrayTwoは空ではありません

3つの配列:
$ ArrayThreeは空ではありません

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

$ArrayFour = array();

これは空になります。つまりempty()、上記の場合にPHPを使用するとTRUEが返されます。

したがって、配列にキーがある場合(たとえば、フォームの入力名によって、または手動で割り当てた場合(つまり、データベースの列名をキーとして配列を作成しますが、データベースからの値/データがない場合)、配列はになりませんempty()

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

ただし、「値が存在する場合」がTRUEまたはFALSEを返すことを知る必要があるだけの場合、これは最善の方法ではありません。配列にキーがあることがわかっている場合に、配列に値があるかどうかを判別するには、さまざまな方法があります。関数またはクラスが最善のアプローチかもしれませんが、いつものように、それは環境と正確な要件、および配列(現在の場合)で現在実行していることなどの他の事項に依存します。


配列に値があるかどうかを確認するために非常に小さなコードを使用するアプローチは次のとおりです。

使用array_filter()
配列の各値を反復処理して、それらをコールバック関数に渡します。コールバック関数がtrueを返す場合、配列の現在の値が結果配列に返されます。配列キーは保持されます。

$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
  }

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

配列1:
$ arrayoneは空ではありません

ARRAY TWO:
$ arraytwoは空ではありません

3つの配列:
$ arraythreeは空です

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


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

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


2
これをありがとう。それは本当に有益で、使用して私の問題を解決することができましたarray_filter()
Brian Powell

empty(array())は常にFALSEと評価されるため、count(array())== 0を追加すると、trueが生成されます
timmz

1
count(array())==0キーがあり値がない場合、@ mboullouz はfalseになるため、これは値のみのチェックには役立ちません。あなたのステートメントは正しいですがcount(array())、配列はもちろん空なので、でテストを強制しています。配列がフォームまたは他の場所から戻ってきたときに、それが空(キー/値)であるか、値があるかどうかを確認する必要があります
James

このソリューションは、この種のアレイに最適です。たとえば、入力ファイルを検証する場合に役立ちます array_filter($_FILES["documento"]['name'])
Gendrith


12

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

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

11

falseや空の行(など0 => '')を除外したい場合、使用empty()が失敗します:

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

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

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

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

これは別の質問に対する正しい答えです。配列フィルターを使用すると、誤った値を持つ既存の要素が破棄されます。これはOPが要求するものではありません。
mickmackusa

8

なぜ誰もこの答えを言わなかった:

$array = [];

if($array == []) {
    // array is empty
}

1
あなたの発言は正しくありません。誰かがこの答えを言った-Tim Ogilvy-一年前。代わりに角括弧を使用するarray()ことも同じです。
mickmackusa

内部的には同じ答えです...技術的には。古い配列関数の代わりに角括弧を使用しました。
ロブ

7
is_array($detect) && empty($detect);

is_array


これらは不要なチェックです。OPが呼び出しexplode()ています-配列タイプのデータを返します。チェックempty()は不要な関数呼び出しです。2012年にコビーが述べたように、if($detect)必要なのはこれだけです。このソリューションは、このタスクや他の人には実装しないでください。あなたはコールする必要が決してありません、あなたも、この質問の範囲を超えての状況をカバーしていることを主張するかもしれないempty()AFTER is_array()変数は「セット」でない場合は、その後のでis_array()あれば、:「未定義の変数に関するお知らせ」を生成しますがisset()、その後empty()やり過ぎ、ちょうど使用であり、コビーの答え。
mickmackusa

6

投稿の最後にあるベンチマークを実行しました。メソッドを比較するには:

  • count($arr) == 0 : カウント
  • empty($arr) : 空の
  • $arr == [] :comp
  • (bool) $arr :キャスト

次の結果を得た

Contents  \method |    count     |    empty     |     comp     |     cast     |
------------------|--------------|--------------|--------------|--------------|
            Empty |/* 1.213138 */|/* 1.070011 */|/* 1.628529 */|   1.051795   |
          Uniform |/* 1.206680 */|   1.047339   |/* 1.498836 */|/* 1.052737 */|
          Integer |/* 1.209668 */|/* 1.079858 */|/* 1.486134 */|   1.051138   |
           String |/* 1.242137 */|   1.049148   |/* 1.630259 */|/* 1.056610 */|
            Mixed |/* 1.229072 */|/* 1.068569 */|/* 1.473339 */|   1.064111   |
      Associative |/* 1.206311 */|   1.053642   |/* 1.480637 */|/* 1.137740 */|
------------------|--------------|--------------|--------------|--------------|
            Total |/* 7.307005 */|   6.368568   |/* 9.197733 */|/* 6.414131 */|

空とブール値へのキャストの違いは重要ではありません。私はこのテストを複数回実行しましたが、それらは本質的に同等のようです。配列の内容は重要な役割を果たしていないようです。2つは反対の結果を生成しますが、論理的な否定はほとんどの場合、キャストを勝つためにプッシュするのにかろうじて十分です。

#!/usr/bin/php
<?php

//    012345678
$nt = 90000000;

$arr0 = [];
$arr1 = [];
$arr2 = [];
$arr3 = [];
$arr4 = [];
$arr5 = [];

for ($i = 0; $i < 500000; $i++) {
    $arr1[] = 0;
    $arr2[] = $i;
    $arr3[] = md5($i);
    $arr4[] = $i % 2 ? $i : md5($i);
    $arr5[md5($i)] = $i;
}

$t00 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    count($arr0) == 0;
}
$t01 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    empty($arr0);
}
$t02 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    $arr0 == [];
}
$t03 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    (bool) $arr0;
}
$t04 = microtime(true);

$t10 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    count($arr1) == 0;
}
$t11 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    empty($arr1);
}
$t12 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    $arr1 == [];
}
$t13 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    (bool) $arr1;
}
$t14 = microtime(true);

/* ------------------------------ */

$t20 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    count($arr2) == 0;
}
$t21 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    empty($arr2);
}
$t22 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    $arr2 == [];
}
$t23 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    (bool) $arr2;
}
$t24 = microtime(true);

/* ------------------------------ */

$t30 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    count($arr3) == 0;
}
$t31 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    empty($arr3);
}
$t32 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    $arr3 == [];
}
$t33 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    (bool) $arr3;
}
$t34 = microtime(true);

/* ------------------------------ */

$t40 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    count($arr4) == 0;
}
$t41 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    empty($arr4);
}
$t42 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    $arr4 == [];
}
$t43 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    (bool) $arr4;
}
$t44 = microtime(true);

/* ----------------------------------- */

$t50 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    count($arr5) == 0;
}
$t51 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    empty($arr5);
}
$t52 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    $arr5 == [];
}
$t53 = microtime(true);
for ($i = 0; $i < $nt; $i++) {
    (bool) $arr5;
}
$t54 = microtime(true);

/* ----------------------------------- */

$t60 = $t00 + $t10 + $t20 + $t30 + $t40 + $t50;
$t61 = $t01 + $t11 + $t21 + $t31 + $t41 + $t51;
$t62 = $t02 + $t12 + $t22 + $t32 + $t42 + $t52;
$t63 = $t03 + $t13 + $t23 + $t33 + $t43 + $t53;
$t64 = $t04 + $t14 + $t24 + $t34 + $t44 + $t54;

/* ----------------------------------- */

$ts0[1] = number_format(round($t01 - $t00, 6), 6);
$ts0[2] = number_format(round($t02 - $t01, 6), 6);
$ts0[3] = number_format(round($t03 - $t02, 6), 6);
$ts0[4] = number_format(round($t04 - $t03, 6), 6);

$min_idx = array_keys($ts0, min($ts0))[0];
foreach ($ts0 as $idx => $val) {
    if ($idx == $min_idx) {
        $ts0[$idx] = "   $val   ";
    } else {
        $ts0[$idx] = "/* $val */";
    }

}

$ts1[1] = number_format(round($t11 - $t10, 6), 6);
$ts1[2] = number_format(round($t12 - $t11, 6), 6);
$ts1[3] = number_format(round($t13 - $t12, 6), 6);
$ts1[4] = number_format(round($t14 - $t13, 6), 6);

$min_idx = array_keys($ts1, min($ts1))[0];
foreach ($ts1 as $idx => $val) {
    if ($idx == $min_idx) {
        $ts1[$idx] = "   $val   ";
    } else {
        $ts1[$idx] = "/* $val */";
    }

}

$ts2[1] = number_format(round($t21 - $t20, 6), 6);
$ts2[2] = number_format(round($t22 - $t21, 6), 6);
$ts2[3] = number_format(round($t23 - $t22, 6), 6);
$ts2[4] = number_format(round($t24 - $t23, 6), 6);

$min_idx = array_keys($ts2, min($ts2))[0];
foreach ($ts2 as $idx => $val) {
    if ($idx == $min_idx) {
        $ts2[$idx] = "   $val   ";
    } else {
        $ts2[$idx] = "/* $val */";
    }

}

$ts3[1] = number_format(round($t31 - $t30, 6), 6);
$ts3[2] = number_format(round($t32 - $t31, 6), 6);
$ts3[3] = number_format(round($t33 - $t32, 6), 6);
$ts3[4] = number_format(round($t34 - $t33, 6), 6);

$min_idx = array_keys($ts3, min($ts3))[0];
foreach ($ts3 as $idx => $val) {
    if ($idx == $min_idx) {
        $ts3[$idx] = "   $val   ";
    } else {
        $ts3[$idx] = "/* $val */";
    }

}

$ts4[1] = number_format(round($t41 - $t40, 6), 6);
$ts4[2] = number_format(round($t42 - $t41, 6), 6);
$ts4[3] = number_format(round($t43 - $t42, 6), 6);
$ts4[4] = number_format(round($t44 - $t43, 6), 6);

$min_idx = array_keys($ts4, min($ts4))[0];
foreach ($ts4 as $idx => $val) {
    if ($idx == $min_idx) {
        $ts4[$idx] = "   $val   ";
    } else {
        $ts4[$idx] = "/* $val */";
    }

}

$ts5[1] = number_format(round($t51 - $t50, 6), 6);
$ts5[2] = number_format(round($t52 - $t51, 6), 6);
$ts5[3] = number_format(round($t53 - $t52, 6), 6);
$ts5[4] = number_format(round($t54 - $t53, 6), 6);

$min_idx = array_keys($ts5, min($ts5))[0];
foreach ($ts5 as $idx => $val) {
    if ($idx == $min_idx) {
        $ts5[$idx] = "   $val   ";
    } else {
        $ts5[$idx] = "/* $val */";
    }

}

$ts6[1] = number_format(round($t61 - $t60, 6), 6);
$ts6[2] = number_format(round($t62 - $t61, 6), 6);
$ts6[3] = number_format(round($t63 - $t62, 6), 6);
$ts6[4] = number_format(round($t64 - $t63, 6), 6);

$min_idx = array_keys($ts6, min($ts6))[0];
foreach ($ts6 as $idx => $val) {
    if ($idx == $min_idx) {
        $ts6[$idx] = "   $val   ";
    } else {
        $ts6[$idx] = "/* $val */";
    }

}

echo "             |    count     |    empty     |     comp     |     cast     |\n";
echo "-------------|--------------|--------------|--------------|--------------|\n";
echo "       Empty |";
echo $ts0[1] . '|';
echo $ts0[2] . '|';
echo $ts0[3] . '|';
echo $ts0[4] . "|\n";

echo "     Uniform |";
echo $ts1[1] . '|';
echo $ts1[2] . '|';
echo $ts1[3] . '|';
echo $ts1[4] . "|\n";

echo "     Integer |";
echo $ts2[1] . '|';
echo $ts2[2] . '|';
echo $ts2[3] . '|';
echo $ts2[4] . "|\n";

echo "      String |";
echo $ts3[1] . '|';
echo $ts3[2] . '|';
echo $ts3[3] . '|';
echo $ts3[4] . "|\n";

echo "       Mixed |";
echo $ts4[1] . '|';
echo $ts4[2] . '|';
echo $ts4[3] . '|';
echo $ts4[4] . "|\n";

echo " Associative |";
echo $ts5[1] . '|';
echo $ts5[2] . '|';
echo $ts5[3] . '|';
echo $ts5[4] . "|\n";

echo "-------------|--------------|--------------|--------------|--------------|\n";
echo "       Total |";
echo $ts6[1] . '|';
echo $ts6[2] . '|';
echo $ts6[3] . '|';
echo $ts6[4] . "|\n";

良いベンチマークですが、sizeofどれがempty...のエイリアスであるかを忘れて
しまいました

参考:PHP 7.4を使用してこのベンチマークを実行すると、比較が最速であることを示すさまざまな結果が得られました。
ニックメリル

5

配列の内容を確認する場合は、次を使用できます。

$arr = array();

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

こちらをご覧ください:http : //codepad.org/EORE4k7v


2012年にCobbyが示したように、宣言された配列が空かどうかを確認するために関数を呼び出す必要はありません。
mickmackusa

5

私の意見では、インデックス付き配列の最も簡単な方法は単純です:

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

配列の 'if'条件は、配列がない場合はtrueに、配列が空の場合はfalseに評価されます。これは連想配列に適用されません


コビーはこの手法を2012年に効果的に述べました。彼の回答には現在133の賛成票があります。
mickmackusa

これは、意見の問題として「最も単純」ではありません-より簡潔にすることができる構文がなく、関数呼び出しのオーバーヘッドがないため、最も単純です。連想キーではなく、インデックス付きキーを持つ配列へのアクセスに違いはありません。この答えは誤解を招く研究者です。この答えは冗長であり、正しくありません3v4l.org/DSLha
mickmackusa

3

このコードを使用します

$variable = array();

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

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


2012年にCobbyが示したように、宣言された配列が空かどうかを確認するために関数を呼び出す必要はありません。
mickmackusa

3

あなたはarray_filter()すべての状況でうまく機能するものを使うことができます:

$ray_state = array_filter($myarray);

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

1
この答えは不必要なチェックを採用しています。まず第一に、OPはその空性をチェックする前に配列から誤った値をフィルタリングすることに関心がないため、投稿された質問から逸脱しました。次に、2012年にCobbyが示したように、宣言された配列が空かどうかを確認するために関数を呼び出す必要はありません。
mickmackusa

2
 $gamerow = mysql_fetch_array($gameresult);

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

  // do stuf if array is empty
}

2

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

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

count()呼び出しは、完全に削除することができます- Cobbyの答えを参照してください。
mickmackusa

2

最も適切な決定を行うには、データの品質と従うべきプロセスを知る必要があります。

  1. この行を失格/無視/削除する場合、最も早いフィルタリングポイントはmysqlクエリにあるはずです。

    • WHERE players IS NOT NULL
    • WHERE players != ''
    • WHERE COALESCE(players, '') != ''
    • WHERE players IS NOT NULL AND players != ''
    • ...ストアデータに依存し、他の方法もあるので、ここで終了します。
  2. 列が結果セットに存在するかどうかが100%わからない場合は、列が宣言されていることを確認する必要があります。これは、呼び出しを意味しますarray_key_exists()isset()またはempty()列に。私はここに違いを描く気にするつもりはありません(その内訳について他のSOページがあり、ここではスタートだ:123)。とは言っても、結果セットを完全に制御できない場合は、アプリケーションの「柔軟性」に夢中になる可能性があり、存在しない列データにアクセスする可能性のある問題に価値があるかどうか再考する必要があります。 事実上、列が宣言されているかどうかを確認する必要はないはずです。つまりempty()、このタスクでは必要ないはずです。 誰かがそれを主張しているならempty()より適切な場合、彼らはスクリプトの表現力について自分の個人的な意見を押し進めています。以下の#5の条件があいまいであることがわかった場合は、コードにインラインコメントを追加してください。要するに、関数呼び出しを行うことにはプログラム上の利点がないということです。

  3. 文字列値に、0true / valid / non-emptyと見なしたいものが含まれている可能性がありますか?その場合は、列の値に長さがあるかどうかを確認するだけで済みます。

    これはを使用したデモstrlen()です。これは、分解された場合に文字列が意味のある配列要素を作成するかどうかを示します。

  4. 無条件に爆発することにより、空でない配列を生成することが保証されることに言及することが重要だと思います。 証明は次のとおりです。デモ つまり、配列が空かどうかを確認してもまったく意味がありません。毎回空ではありません。

  5. 文字列にゼロ値が含まれない可能性がある場合(たとえば、これは開始し1、増分のみのIDで構成されるcsvであるため)、if ($gamerow['players']) {必要なのはストーリーの終わりだけです。

  6. ...しかし、この値が空であると判断した後はどうしますか?予期しているダウンスクリプトがあるが$playerlist、その変数を条件付きで宣言している場合、前の行の値を使用するか、再度通知を生成するリスクがあります。それで、あなたは無条件に何か$playerlistとして宣言する必要があります?文字列に真の値がない場合、アプリケーションは空の配列を宣言することでメリットがありますか?たぶん、答えはイエスです。この場合、空の配列にフォールバックすることで、変数が配列型であることを確認できます。この方法では、その変数をループにフィードしても問題はありません。次の条件付き宣言はすべて同等です。

    • `if($ gamerow ['players']){$ playerlist = explode( '、'、$ gamerow ['players']); } else {$ playerlist = []; }
    • $playerlist = $gamerow['players'] ? explode(',', $gamerow['players']) : [];

この非常に基本的なタスクを説明するために、なぜそんなに長い時間を費やしたのですか?

  1. 私はこのページのほぼすべての回答を内部告発しており、この回答は復讐票を引く可能性があります(これは、このサイトを擁護する内部告発者によく起こります-回答に反対票があり、コメントがない場合、常に懐疑的です)。
  2. Stackoverflowは、誤った情報や次善の手法で研究者を害さない信頼できるリソースであることが重要だと思います。
  3. これは、コピーアンドペーストプログラマの世代にスプーンフィーディングを行うのではなく、開発者がその方法と理由を学習できるように、私が今後の開発者にどれだけ関心があるかを示す方法です。
  4. 私は頻繁に古いページを使用して新しい重複ページを閉じます-これは重複をすばやく見つける方法を知っているベテランボランティアの責任です。私は、新しい研究者に積極的に害を及ぼしているため、悪い/誤った/準最適/誤解を招く情報を含む古いページを参照として使用することはできません。

@ptrそれはここです。
mickmackusa

1
empty($gamerow['players'])

時々、$matches = preg_grep ( "/^$text (\w+)/i" , $array ) ; それをチェックアウトするための要素配列のキー値を知ることができませんでした if ( count ( $matches ) > 0 )
セーラム

列が結果セットに存在することが想定されているため、empty()作業が多すぎます。
mickmackusa

-1

この問題を次のコードで解決しました。

$catArray=array();                          

$catIds=explode(',',$member['cat_id']);
if(!empty($catIds[0])){
foreach($catIds as $cat_id){
$catDetail=$this->Front_Category->get_category_detail($cat_id);
$catArray[]=$catDetail['allData']['cat_title'];
}
echo implode(',',$catArray);
}

1
Stack Overflowへようこそ!コードスニペットをご利用いただきありがとうございます。このコードスニペットは、限られた範囲内ですぐに役立つ場合があります。適切な説明は、なぜこれが問題の優れた解決策であるかを説明することにより、長期的な価値を大幅に改善し、他の同様の質問を持つ将来の読者にとってより有用になります。答えを編集して、仮定を含めて説明を追加してください。
sepehr 2018年

-3

これはすべてのケースで機能しているようです

if(!empty(sizeof($array)))

3
これはオーバーヘッドが多すぎます。このソリューションは、いかなる理由でも開発者が実装するべきではありません。
mickmackusa

@mickmackusa素晴らしい点ですが、初心者はどの操作がオーバーヘッドが大きすぎるかを特定する方法をどのようにして学習しますか?景品とは何ですか、またはパフォーマンステストを実行せずにオーバーヘッドが多すぎる場合の額面基準は何ですか?
ptrcao

1
@ptrすべての関数呼び出しには「コスト」があります。関数呼び出しなしでタスクを完了できる場合、関数呼び出しを使用する手法よりもパフォーマンスが優れています。
mickmackusa

@ptrこの質問に対する包括的な回答を投稿しました。この特定のページについての懸念が解消されれば幸いです。
mickmackusa

@mickmackusa別の投稿へのリンクを含めるつもりですか?
ptrcao

-4

どうですか:

DepartmentPerSchool = array();
(empty(is_array($ DepartmentPerSchool)))?$ DepartmentPerSchool //またはエコーが空ではない:array( 'not set' => 'Not set。Contact Admin'); //またはエコーが空です
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.