web-dev-qa-db-ja.com

配列が空かどうか調べる

私は以下のコードを持っています

<?php

$error = array();
$error['something'] = false;
$error['somethingelse'] = false;

if (!empty($error))
{
    echo 'Error';
}
else
{
    echo 'No errors';
}

?>

ただし、何も設定されていなくても、empty($error)は依然としてtrueを返します。

何が違うの?

227
gbhall

配列には2つの要素がありますが、これは配列が空であるという意味ではありません。簡単な回避策としては、次のようにします。

$errors = array_filter($errors);

if (!empty($errors)) {
}

array_filter()関数のデフォルトの振る舞いはnull0''またはfalseに等しいすべての値を配列から削除します。

そうでなければあなたの特別な場合empty()構文は "空の"値があっても少なくとも1つの要素があれば常にtrueを返します。

408
ioseb

することによってそれをチェックすることもできます。

if(count($array) > 0)
{
    echo 'Error';
}
else
{
    echo 'No Error';
}
68
brenjt

0要素がなければ、sizeofでサイズをチェックしてみてください。

15
0xd

PHPに組み込まれている empty() 関数は、変数が空、null、false、またはゼロの表現であるかどうかを確認します。配列エントリに関連付けられた値がfalseであるという理由だけでtrueは返されません。この場合、配列には実際の要素が含まれており、それがすべて評価されます。

連想配列で特定のエラー条件が true に設定されているかどうかをチェックしたい場合は、 array_keys() 関数を使用して、値がtrueに設定されているキーをフィルタリングできます。 。

$set_errors = array_keys( $errors, true );

その後、empty()関数を使用してこの配列が空かどうかを確認し、同時にエラーがあるかどうか、またどのエラーが発生したかを確認することができます。

15
wrren

要素数がゼロの配列はfalseに変換されます

http://php.net/manual/en/language.types.boolean.php

6
Eelco

ただし、何も設定されていなくても、empty($ error)は依然としてtrueを返します。

それがempty()のしくみではありません。 manual によると、empty配列でのみtrueを返します。他には意味がありません。

4
Pekka 웃

PHPドキュメントから:

Varの値が空でもゼロでもない場合はFALSEを返します。

次のものは空と見なされます。

"" (an empty string)
0 (0 as an integer)
0.0 (0 as a float)
"0" (0 as a string)
NULL
FALSE
array() (an empty array)
var $var; (a variable declared, but without a value in a class)
2
David

こんにちは配列は1つのオブジェクトなのでnull型または空白

   <?php
        if($error!=null)
            echo "array is blank or null or not array";
    //OR
       if(!empty($error))
           echo "array is blank or null or not array";
    //OR
     if(is_array($error))
           echo "array is blank or null or not array";
   ?>
2
Pulkit Ambliya

関数empty()は空の配列をテストするのには使えません!例:

$a=array("","");
if(empty($a)) echo "empty";
else echo "not empty"; //this case is true

機能が必要です。

function is_array_empty($a){
foreach($a as $Elm)
if(!empty($Elm)) return false;
return true;
}

わかりました、これは非常に古い質問です:)、しかし、私はこのスレッドが解決策を探しているのを見つけました、そして、私は良いものを見つけませんでした。

さようなら(私の英語をごめんね)

2
thewebsurfer

PHPでは、配列内の個々の項目またはオブジェクトのプロパティが空の場合でも、empty($subject)関数を使用して配列またはオブジェクトが空と評価されることはありません。つまり、個別に「空」とテストされる一連のデータをまとめると、空ではないコンポジットが作成されます。次のPHP関数を使用して、配列内の項目またはオブジェクトのプロパティが空かどうかを判断します。

function functionallyEmpty($o)
{
  if (empty($o)) return true;
  else if (is_numeric($o)) return false;
  else if (is_string($o)) return !strlen(trim($o)); 
  else if (is_object($o)) return functionallyEmpty((array)$o);

  // If it's an array!
  foreach($o as $element) 
    if (functionallyEmpty($element)) continue; 
    else return false; 

  // all good.
  return true;
}

使用例

$subject = array('', '', '');

empty($subject); // returns false
functionallyEmpty($subject); // returns true

class $Subject {
    a => '',
    b => array()
}

$theSubject = new Subject();

empty($theSubject); // returns false
functionallyEmpty($theSubject); // returns true

それを再現することはできません(php 5.3.6)。

php > $error = array();
php > $error['something'] = false;
php > $error['somethingelse'] = false;
php > var_dump(empty($error));
bool(false)

php > $error = array();
php > var_dump(empty($error));
bool(true)
php >

trueを返すempty()呼び出しはどこで行っていますか?

1
Marc B
<?php
if(empty($myarray))
echo"true";
else
echo "false";
?>
1
Vinit