10
votes

Comment supprimer des valeurs vides de la matrice multidimensionnelle dans PHP?

J'ai cherché beaucoup de réponses, mais aucun d'entre eux ne travaille pour moi.

Ceci est les données attribuées à mon $ Quantités code> tableau: p>

Array(
    [10] => Array([25.00] => 1)
    [9] => Array([30.00] => 3)
    [8] => Array([30.00] => 4)
    [12] => Array()
    [1] => Array()
    [2] => Array()
)


2 commentaires

Pensez à utiliser var_dump () au lieu de nous montrer le contenu du tableau.


Pour une page qui est utilisée comme destination pour tant de liaisons Dupe, cette page a une quantité incroyable de réponses incorrectes évoquées. @ RICHARD-MX J'ai posté une réponse qui n'utilise pas de réursion ou de multiples fonctions itérantes afin que les lecteurs trafiqués ici puissent voir une solution de travail maigre (zéro sûre). (Il n'est pas clair dans votre message si vos tableaux vides ont des chaînes vides ou null comme des valeurs, donc je suis démo avec les deux)


8 Réponses :


2
votes

Je ne sais pas si c'est exactement ce que vous recherchez. Strike>

function array_remove_null($array) {
    foreach ($array as $key => $value)
    {
        if(is_null($value))
            unset($array[$key]);
        if(is_string($value) && empty($value))
            unset($array[$key]);
        if(is_array($value))
            $array[$key] = array_remove_null($value);
        if(isset($array[$key]) && count($array[$key])==0)
            unset($array[$key]);
    }
    return $array;
}


6 commentaires

Bonjour Jason, merci pour votre réponse. Malheureusement, cela ne fonctionne pas pour ce dont j'ai besoin. Comme Paul répondit, il revient la même chose que la question initiale.


Je ne sais pas pourquoi cela a 4 upvotes. Cette réponse que seule ne fonctionne pas. Demo


@MickMackusa Cet exemple a reculé dans les jours de PHP 5.


@Jasonfoglia Il n'y a rien de version spécifique qui a un impact sur votre réponse. Cela ne fonctionne pas dans PHP5 non plus. PHP 5.5.0.A.2 Démo


@MickMackusa Cette réponse répond à la question. Comment éliminer les valeurs d'un tableau; Tableaux non vides de tableaux.


Laissez-nous Continuez cette discussion en chat .



16
votes

peu en retard, mais peut aider une personne à la recherche de même réponse. J'ai utilisé cette approche très simple de;

  1. Retirez toutes les touches des tableaux imbriqués qui ne contiennent aucune valeur, puis
  2. Retirez tous les tableaux imbriqués vides.
    xxx

0 commentaires

0
votes

Utiliser array_map () Pour filtrer chaque tableau en $ TRAY:

$newArray = array_map('array_filter', $array);


1 commentaires

Cette réponse ne fonctionne pas. Cela ne fonctionne pas dans le lien de démonstration posté. Cela ne fonctionne pas dans Mon lien de démonstration Comment dans le monde a-t-il gagné 3 upvotes? Downvote de moi.



0
votes
$newArray = array_map('array_filter', $array);
This sintax it's work and very help full thank's guys ..

2 commentaires

Il s'agit d'une méthode duplication exacte (caractère de caractère) de la réponse de Naitikshah qui a été publiée deux mois plus tôt. Si vous ne pouvez pas améliorer votre réponse pour fournir de meilleures informations, vous devez supprimer cette réponse car elle n'ajoute pas de valeur à la page (il s'agit simplement de la page de page).


Cette réponse ne fonctionne pas. Cela ne fonctionne pas dans Mon lien de démonstration Comment dans le monde a-t-il gagné 3 upvotes? Downvote de moi.



6
votes

La fonction suivante a fonctionné pour mon cas. Nous pouvons utiliser une fonction récursive simple pour supprimer tous les éléments vides du tableau PHP multidimensionnel: xxx

Nous devons simplement appeler cette fonction: xxx


0 commentaires

0
votes

Utiliser array_filter code> avec array_map code> Comme ci-dessous:

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


1 commentaires

Ce ne sont pas de nouvelles informations. Ceci est un duplicata de Réponse d'Alastairf écrite comme une doublure.



-1
votes

Ceci supprime tous les éléments avec des valeurs nulles récursives sur des tableaux multidéminsionnels. Fonctionne sur PHP> = 5.6. Si vous souhaitez supprimer toutes les valeurs "vides", remplacez ! Is_null ($ valeur) code> avec ! Vide ($ valeur) code>.

function recursivelyRemoveItemsWithNullValuesFromArray(array $data = []): array
{
    $data = array_map(function($value) {
        return is_array($value) ? recursivelyRemoveItemsWithNullValuesFromArray($value) : $value;
    }, $data);

    return array_filter($data, function($value) {
        return !is_null($value);
    });
}


2 commentaires

Cette réponse ne fournit pas la sortie souhaitée de l'OP. Demo


@MickMackusa Comme indiqué dans ma réponse "Si vous souhaitez supprimer toutes les valeurs" vides ", remplacez! IS_NULL (valeur $) avec! vide (valeur $)". Votre démo fonctionne comme prévu. J'ai mis à jour votre démo à l'aide de vide () au lieu de IS_NULL (). Veuillez vérifier: Sandbox.onlinephPFonctions.com/code/...



-4
votes

Étant donné que les banquiers de votre réseau n'ont qu'un élément chacun, vous pouvez simplifier l'approche en utilisant l'une des deux méthodes suivantes. L'avantage logique consiste à éviter l'itérateur fonctionnel ( array_filter code>) sur les éléments de deuxième niveau. C'est pourquoi actuel () code> est plus approprié pour cette question / page.

code: ( Demo ) P>

array (
  10 => 
  array (
    '25.00' => 1,
  ),
  9 => 
  array (
    '30.00' => 3,
  ),
  8 => 
  array (
    '30.00' => 4,
  ),
)


0 commentaires