2017-10-16 13 views
0

Salut, j'ai un tableau qui contient deux tableaux qui a la structure suivante:Suppression des enregistrements spécifiques de clé de tableau associatif en php

categories [ 
    "lvl0" => array:2 [ 
    0 => "Cleaning" 
    1 => "Bread" 
    ] 
    "lvl1" => array:2 [ 
    0 => null 
    1 => "Bread > rolls" 
    ] 
] 

je voudrais supprimer tous les enregistrements de NULL à partir du tableau « de lvl1 » mais n'ont pas été en mesure de trouver la bonne méthode pour le faire.

J'ai essayé:

array_filter($categories['lvl1']) 

Mais cela supprime également tous les enregistrements associés à LVL1 et pas seulement les NULL.

Toute aide serait grandement appréciée.

Merci

+1

'array_combine (array_keys (catégories $), array_map ('array_filter', $ catégories))' ' – apokryfos

+0

catégories $ [ 'lvl1'] = array_filter (catégories $ [ 'lvl1'])'? –

+2

Pouvez-vous ajouter un peu plus de code pour montrer le contexte dans lequel vous avez utilisé 'array_filter ($ categories ['lvl1'])'? _Cela ne doit pas supprimer les valeurs non vides. –

Répondre

0

Robbie Averill qui a commenté mon post avec le suivant résolu le problème:

$categories['lvl1'] = array_filter($categories['lvl1']); 
0

array_filter() prend un rappel comme second argument. Si vous ne le fournissez pas, il renvoie uniquement les enregistrements qui ne sont pas égaux à boolean false. Vous pouvez fournir un rappel simple qui supprime les valeurs vides.

array_filter() utilise également une copie de votre tableau (plutôt qu'une référence), vous devez donc utiliser la valeur de retour.

Par exemple:

$categories = [ 
    "lvl0" => [ 
    "Cleaning", 
    "Bread" 
    ], 
    "lvl1" => [ 
    null, 
    "Bread > rolls" 
    ] 
]; 

$lvl1 = array_filter($categories['lvl1'], function($value) { 
    return !empty($value); 
}); 

var_dump($lvl1); 

qui retourne:

array(1) { 
    [1] => 
    string(13) "Bread > rolls" 
} 
+0

L'utilisation de 'return! Empty ($ value);' dans le rappel a le même effet que de ne pas utiliser de callback. –

+0

Techniquement, bien sûr. Mais c'est aussi moins instructif car cela ne lui montre pas comment faire des changements au callback. –

0

Je faisais la même question sur mon dernier day.Generally travaillant pour un tableau associatif array_filter() a besoin de la clé du tableau pour filtrer null , false valeurs etc. Mais cette petite fonction m'aide à filtrer les valeurs NULL sans connaître la clé du tableau associatif. Espérons que cela vous aidera également, https://eval.in/881229

code:

function array_filter_recursive($input) 
    { 
    foreach ($input as &$value) 
    { 
     if (is_array($value)) 
     { 
     $value = array_filter_recursive($value); 
     } 
    } 

    return array_filter($input); 
    } 

$categories = [ 
    "lvl0" => [ 
    "Cleaning", 
    "Bread" 
    ], 
    "lvl1" => [ 
    null, 
    "Bread > rolls" 
    ] 
]; 

$result = array_filter_recursive($categories); 
print '<pre>'; 
print_r($result); 
print '</pre>'; 

Sortie:

(
    [lvl0] => Array 
     (
      [0] => Cleaning 
      [1] => Bread 
     ) 

    [lvl1] => Array 
     (
      [1] => Bread > rolls 
     ) 

) 

Ref: http://php.net/manual/en/function.array-filter.php#87581