array_filter pour les champs vides, mais pas "0"

array_filter pour les champs vides, mais pas "0" - PHP - Programmation

Marsh Posté le 30-09-2019 à 16:44:41    

Bonjour,
 
J'envoie un tableau à une méthode pour enregistrement des données qu'il contient.
 
Avant de l'enregistrer je supprime dans celui-ci toutes les données vides avec un array_filter().
Seul problème, j'ai un champs caché qui contient soit 1, soit 0. Et du coup dans le cas où il vaut 0 le array_filter() le supprime du tableau.
 
J'ai testé avec un array_filter avec une fonction pour retourner ce qu'il faut mais je ne dois pas faire ce qu'il faut car ça ne fonctionne pas...
Bref, je suis preneur d'un array_filter() permettant de garder les champs égaux à '0'.
 
J'ai testé ça pour le moment mais sans succès:
 

Code :
  1. $data = array_filter($data, function ($k) {
  2.             return (!empty($k) || (int)$k === 0);
  3.         });


 
Merci! :)

Reply

Marsh Posté le 30-09-2019 à 16:44:41   

Reply

Marsh Posté le 30-09-2019 à 16:52:00    

J'ai continué mes recherches et ceci à l'air de fonctionner:
 

Code :
  1. $data = array_filter($data, function ($k) {
  2.             return (!empty($k) || $k === 0 || $k === '0');
  3.         });


 
Mais il existe peut-être quelque chose de mieux/plus propre?

Reply

Marsh Posté le 30-09-2019 à 19:10:52    

Salut,
 
quelle est ta définition de valeurs vides ?
 
Parce que, peut être que :

Code :
  1. $data = array_filter($data, function ($k) {
  2.     return '' !== $k;
  3. });


Te suffirait ?
 
Sachant que pour PHP, '0' est une valeur fausse (et vide par extension).
 
Si tu traites des donnés POST (ou GET voire autre), les données seront obligatoirement des chaînes de caractères ou des tableaux (ie $k === 0 ne sera jamais vrai).


Message édité par pluj le 30-09-2019 à 19:14:26
Reply

Marsh Posté le 01-10-2019 à 08:54:59    

MA définition de vide est… vide et pas "0" quoi. :)
 
Et donc ta solution fonctionne nickel, comme la mienne d'ailleurs, mais est plus propre.
 
Merci!

Reply

Marsh Posté le 01-10-2019 à 12:02:42    

Merci beaucoup! ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed