2016-10-19 1 views
0

Je le tableau associatif suivant:Retirer les éléments vides de tableau associatif de manière sélective en PHP

Array 
(
    [0] => Array 
     (
      [0] => 18-Jul-16 
      [1] => 29-Jul-15 
      [2] => 2-Feb-16 
      [3] => 3301 
      [4] => 1800 Bimodel 
      [5] => 5813 
      [6] => 1 800 Bimodel Multi-Option Test 
      [7] => Tested 
      [8] => Shop Center 
      [9] => Shop Services 
      [10] => 864 
      [11] => 20 
      [12] => 884 
      [13] => 0.75 
      [14] => 0.2 
      [15] => 0.49 
      [16] => 429.6 
      [17] => 47.3 
      [18] => 382.3 
      [19] => 
      [20] => Jonas John 
     ) 

    [1] => Array 
     (
      [0] => 
      [1] => 
      [2] => 
      [3] => 
      [4] => 
      [5] => 
      [6] => 
      [7] => 
      [8] => 
      [9] => 
      [10] => 
      [11] => 
      [12] => 
      [13] => 
      [14] => 
      [15] => 
      [16] => 
      [17] => 
      [18] => 
      [19] => 
      [20] => 
     ) 
) 

Pour filtrer les éléments vides, je suis en utilisant le code suivant:

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

ci-dessus le code supprime tous les éléments vides du tableau. Il supprime également la valeur à l'index 19 dans le tableau 0th. Je veux qu'il enlève des éléments de tableau seulement si toutes les valeurs du tableau sont vides. Dans mon cas, seul le tableau à l'index 1 doit être supprimé et le tableau à l'index 0 ne doit pas être supprimé (ou l'un de ses éléments). J'ai toujours besoin de 21 éléments de chaque tableau. Puis-je faire cela sélectivement en utilisant le code php?

Merci

Répondre

1
foreach($dataArray as $outerKey =>$innerArray) { 
$counter=0;   
foreach($innerArray as $key=>$value){ 
     if(trim($value)==""){ 
     $counter++; 
     } 
      if($counter==count($innerArray) 
       unset($dataArray[$outerKey]); 
    } 
} 
+0

Peut être vous devez ajouter unset de l'élément tableauDonnees $ lorsque innerArray $ reste vide ? – krasipenkov

+1

peut écrire une autre logique directement .. @krasipenkov l'a mis à jour..directement accédé à la clé et l'a ensuite désactivé –

+0

Ouais mais le résultat voulu est d'enlever l'élément tableau externe seulement quand tous ses éléments internes sont vides ... si je l'ai compris droite – krasipenkov

0
// 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 !== ''; })); 
0

Pas de magie tout simplement:

<?php 
/** 
$data contains (incoming) unfiltered value 
*/ 
$data = [ 
    'keep1' => [ 
     0,1,2,3 
    ] 
    , 
    'drop1'=>[ 
     '',0,false,[] 
    ] 
    ,'keep2'=>[ 
     2,2,3,4 
    ] 
]; 

foreach ($data as $key => $innerArray) { //check for each element 
    foreach ($innerArray as $innerValue) { 
     if (!empty($innerValue)) { 
      continue 2;//stop investigating at first non empty, we shoud keep this 
     } 
    } 
    //all values in innerArray are empty, drop this 
    unset($data[$key]); 

} 

print_r(array_keys($data)); 

Sortie:

Array 
(
    [0] => keep1 
    [1] => keep2 
) 
+1

Bien que ce fragment de code puisse résoudre la question, [y compris une explication] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) aide vraiment à améliorer la qualité de votre message. Rappelez-vous que vous répondez à la question pour les lecteurs dans le futur, et que ces personnes pourraient ne pas connaître les raisons de votre suggestion de code. – andreas

+0

@Andreas mis à jour avec des commentaires – cske