web-dev-qa-db-fra.com

Vérifier si un tableau est vide

J'ai le code suivant

<?php

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

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

?>

Cependant, empty($error) retourne toujours true, même si rien n'est défini.

Qu'est-ce qui ne va pas?

230
gbhall

Il y a deux éléments dans un tableau et cela ne signifie certainement pas que ce tableau est vide. Pour contourner rapidement le problème, vous pouvez procéder comme suit:

$errors = array_filter($errors);

if (!empty($errors)) {
}

Le comportement par défaut de la fonction array_filter() supprimera toutes les valeurs du tableau qui sont égales à null, 0, '' ou false.

Sinon, dans votre cas particulier, la construction empty() renverra toujours true s'il existe au moins un élément, même avec une valeur "vide".

410
ioseb

Vous pouvez aussi le vérifier en le faisant.

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

Essayez de vérifier sa taille avec sizeof si 0 aucun élément.

15
0xd

La fonction intégrée empty () de PHP vérifie si la variable est vide, nulle, fausse ou une représentation de zéro. Il ne renvoie pas true simplement parce que la valeur associée à une entrée de tableau est false, dans ce cas, le tableau contient des éléments réels et c'est tout ce qui est évalué.

Si vous souhaitez vérifier si une condition d'erreur particulière est définie sur true dans un tableau associatif, vous pouvez utiliser array_keys () fonction pour filtrer les clés dont la valeur est définie sur true.

$set_errors = array_keys( $errors, true );

Vous pouvez ensuite utiliser la fonction empty () pour vérifier si ce tableau est vide, vous indiquant simultanément s'il y a des erreurs et quelles erreurs se sont produites.

15
wrren

tableau avec zéro éléments convertit en faux

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

6
Eelco

Cependant, empty ($ error) renvoie toujours true, même si rien n'est défini.

Ce n'est pas ainsi que empty() fonctionne. Selon le manuel , il retournera true sur un tableau vide uniquement. Tout le reste n'aurait pas de sens.

4
Pekka 웃

De la documentation PHP:

Renvoie FALSE si var a une valeur non vide et non nulle.

Les éléments suivants sont considérés comme vides:

"" (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

salut tableau est un objet afin qu'il soit de type null ou vide

   <?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

la fonction empty() ne fonctionne pas pour tester les tableaux vides! exemple:

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

une fonction est nécessaire:

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

ok, c’est une très vieille question :), mais j’ai trouvé ce fil à la recherche d’une solution et je n’en ai pas trouvé un bon.

au revoir (désolé pour mon anglais)

2
thewebsurfer

En PHP, même si les éléments individuels dans un tableau ou les propriétés d'un objet sont vides, le tableau ou l'objet ne sera pas évalué comme étant vide à l'aide de la fonction empty($subject). En d'autres termes, le bricolage d'un ensemble de données testées individuellement comme "vides" crée un composite non vide. Utilisez la fonction PHP suivante pour déterminer si les éléments d'un tableau ou les propriétés d'un objet sont vides:

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

Exemple d'utilisation:

$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

Je ne peux pas reproduire cela (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 >

où faites-vous exactement l'appel empty() qui renvoie vrai?

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