Question Supprimer les éléments de tableau vides


Certains éléments de mon tableau sont des chaînes vides basées sur ce que l'utilisateur a soumis. Je dois enlever ces éléments. J'ai ceci:

foreach($linksArray as $link)
{
    if($link == '')
    {
        unset($link);
    }
}
print_r($linksArray);

Mais ça ne marche pas, $linksArray a encore des éléments vides. J'ai aussi essayé de le faire avec le empty() fonction mais le résultat est le même.


618
2017-09-06 21:06


origine


Réponses:


Comme vous traitez un tableau de chaînes, vous pouvez simplement utiliser array_filter(), qui gère commodément tout cela pour vous:

print_r(array_filter($linksArray));

Garde en tête que si aucun rappel n'est fourni, toutes les entrées de tableau égales à FALSE (voir convertir en booléen) sera supprimé. Donc, si vous avez besoin de conserver des éléments qui sont la chaîne exacte '0', vous aurez besoin d'un rappel personnalisé:

// PHP < 5.3
print_r(array_filter($linksArray, create_function('$value', 'return $value !== "";')));

// PHP 5.3 and later
print_r(array_filter($linksArray, function($value) { return $value !== ''; }));

1219
2017-09-06 21:10



Vous pouvez utiliser array_filter pour supprimer les éléments vides:

$emptyRemoved = array_filter($linksArray);

Si tu as (int) 0 dans votre tableau, vous pouvez utiliser ce qui suit:

$emptyRemoved = remove_empty($linksArray);

function remove_empty($array) {
  return array_filter($array, '_remove_empty_internal');
}

function _remove_empty_internal($value) {
  return !empty($value) || $value === 0;
}

MODIFIER: Peut-être que vos éléments ne sont pas vides en soi mais contiennent un ou plusieurs espaces ... Vous pouvez utiliser ce qui suit avant d'utiliser array_filter

$trimmedArray = array_map('trim', $linksArray);

143
2017-09-06 21:14



$linksArray = array_filter($linksArray);

"Si aucun rappel n'est fourni, toutes les entrées d'entrée égales à FALSE seront supprimées." - http://php.net/manual/fr/function.array-filter.php


85
2017-09-06 21:14



La réponse la plus populaire sur ce sujet est absolument INCORRECT.

Considérez le script PHP suivant:

<?php
$arr = array('1', '', '2', '3', '0');
// Incorrect:
print_r(array_filter($arr));
// Correct:
print_r(array_filter($arr, 'strlen'));

Pourquoi est-ce? Parce qu'une chaîne contenant un seul caractère '0' donne aussi une valeur booléenne false, même si ce n'est pas une chaîne vide, elle sera quand même filtrée. Ce serait un bug.

Passer la fonction strlen intégrée en tant que fonction de filtrage fonctionnera car elle renvoie un entier différent de zéro pour une chaîne non vide, et un entier nul pour une chaîne vide. Les entiers non nuls donnent toujours la valeur true lorsqu'ils sont convertis en booléen, alors que les entiers zéro valent toujours false lorsqu'ils sont convertis en booléen.

Donc, la réponse absolue, définitive, correcte est:

$arr = array_filter($arr, 'strlen');

71
2018-06-28 16:30



    $myarray = array_filter($myarray, 'strlen');  //removes null values but leaves "0"
    $myarray = array_filter($myarray);            //removes all null values

49
2018-04-22 15:12



Vous pouvez juste faire

array_filter($array)

array_filter: "Si aucun callback n'est fourni, toutes les entrées d'entrée égales à FALSE seront supprimées." Cela signifie que les éléments avec des valeurs NULL, 0, '0', '', FALSE, array () seront également supprimés.

L'autre option est en train de faire

array_diff($array, array(''))

ce qui supprimera les éléments avec les valeurs NULL, '' et FALSE.

J'espère que cela t'aides :)

METTRE À JOUR

Voici un exemple.

$a = array(0, '0', NULL, FALSE, '', array());

var_dump(array_filter($a));
// array()

var_dump(array_diff($a, array(0))) // 0 / '0'
// array(NULL, FALSE, '', array());

var_dump(array_diff($a, array(NULL))) // NULL / FALSE / ''
// array(0, '0', array())

Pour résumer:

  • 0 ou '0' supprimera 0 et '0'
  • NULL, FALSE ou '' supprimera NULL, FALSE et ''

38
2017-11-26 15:35



foreach($linksArray as $key => $link) 
{ 
    if($link === '') 
    { 
        unset($linksArray[$key]); 
    } 
} 
print_r($linksArray); 

28
2017-09-06 21:10



Une autre ligne pour supprimer les éléments vides ("" chaîne vide) de votre tableau.

$array = array_filter($array, create_function('$a','return $a!=="";'));

Note: Ce code garde délibérément les éléments null, 0 et false.


Ou peut-être vous voulez couper vos éléments de tableau d'abord:

$array = array_filter($array, create_function('$a','return trim($a)!=="";'));

Remarque: Ce code supprime également les éléments null et false.


22
2018-02-28 16:46



La réponse la plus votée est faux ou du moins pas complètement vrai que l'OP parle de chaînes vierges seulement. Voici une explication complète:

Qu'est-ce que vide signifier?

Tout d'abord, nous devons nous mettre d'accord sur vide veux dire. Voulez-vous dire filtrer:

  1. la chaînes vides seulement ("")?
  2. la strictement fauxvaleurs? ($element === false)
  3. la Falsey valeurs? (c'est-à-dire 0, 0,0, "", "0", NULL, array () ...)
  4. l'équivalent de PHP empty() fonction?

Comment filtrer les valeurs

Pour filtrer chaînes vides uniquement:

$filtered = array_diff($originalArray, array(""));

Pour filtrer uniquement strictement faux valeurs, vous devez utiliser un rappeler fonction:

$filtered = array_diff($originalArray, 'myCallback');
function myCallback($var) {
    return $var === false;
}

Le rappel est également utile pour toute combinaison dans laquelle vous voulez filtrer les valeurs "falsey", sauf certaines. (Par exemple, filtrer tous les null et false, etc, ne laissant que 0):

$filtered = array_filter($originalArray, 'myCallback');
function myCallback($var) {
    return ($var === 0 || $var === '0');
}

Les troisième et quatrième cas sont (pour notre propos enfin) équivalents, et pour cela tout ce que vous devez utiliser est le défaut:

$filtered = array_filter($originalArray);

9
2017-12-10 13:36