2012-03-13 2 views
2
Array 
(
    [user_mob_1] => Array 
     (
      [mob_code] => 06 
      [mob] => 069633345 
      [type] => 1 
      [phone_id] => 0 
     ) 

    [user_mob_2] => Array 
     (
      [mob_code] => 07 
      [mob] => 07123456 
      [type] => 1 
      [phone_id] => 
     ) 

    [user_mob_6] => Array 
     (
      [mob_code] => 0 
      [mob] => 
      [type] => 1 
      [phone_id] => 0 
     ) 

) 

L'objectif est de supprimer user_mob_ * où mob est vide!Filtrer les tableaux multidimensionnels

La réponse est:

foreach($array as $key => $row) { 
    if(empty($row['mob'])) unset($array[$key]); 
} 

simple, mais je suis nouveau en php et d'abord je Pensé à utiliser des fonctions comme array_filter etc.

Tout ingénieux est simple.

+0

duplication possible de [Search and Remove from Multidimensional Array] (http://stackoverflow.com/questions/3795227/search-and-remove-from-multidimensional-array) – Gordon

+0

Veuillez utiliser la fonction de recherche avant de poser des questions. Cela a été demandé et répondu plusieurs fois auparavant. [Faites vos devoirs] (http://stackoverflow.com/questions/ask-advice) – Gordon

+2

La bonne façon de répondre à votre propre question est comme une réponse (plutôt que dans la question). De cette façon, les gens peuvent voter pour toutes les réponses données et le meilleur peut atteindre le sommet. – Paul

Répondre

23

Votre idée d'utiliser une fonction intégrée comme array_filter est très bonne; PHP a beaucoup de ceux qui peuvent vous rendre la vie plus facile.

Spécifiquement, array_filter accepte un callback que vous pouvez utiliser pour personnaliser la logique de filtrage. Cela fonctionnerait:

$filtered = array_filter($array, function($el) { return !empty($el['mob']); }); 

Ici, le rappel est fourni en anonymous function.

+1

Je n'ai pas downvote, mais si vous remarquez la question, il n'y avait pas de question posée et votre solution ne fait pas quoi le questionneur a déclaré que la solution était. – Paul

+0

@Paul: Désolé d'avoir creusé ça longtemps après (je suis venu ici à cause du commentaire de Matt), mais la réponse est presque équivalente à ce que le PO donne (la différence est que le PO modifie directement le tableau d'entrée copie). – Jon

+0

Aussi la réponse de l'OT s'appuie sur le fait que foreach fonctionne sur une copie du tableau d'entrée. Faire de même avec n'importe quelle autre boucle conduirait à des résultats très indésirables. Ce que j'essaie de dire, c'est que pour les débutants php, voir la réponse originale pourrait les amener à croire que c'est une chose sûre à faire sans savoir pourquoi cela fonctionne réellement. – Yoshi