2016-10-19 4 views
0

Ich habe folgende assoziative Array:Entfernen leerer Elemente aus assoziative Array selektiv in 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] => 
     ) 
) 

Um die leeren Array-Elemente herauszufiltern, I den folgenden Code verwende:

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

Die oben code entfernt alle leeren Elemente aus dem Array. Es entfernt auch den Wert bei Index 19 im 0. Array. Ich möchte, dass Array-Elemente nur dann entfernt werden, wenn alle Werte des Arrays leer sind. In meinem Fall sollte nur Array bei Index 1 entfernt werden und das Array bei 0. Index sollte nicht entfernt werden (oder eines seiner Elemente). Ich brauche immer 21 Elemente von jedem Array. Kann ich das selektiv mit PHP-Code tun?

Dank

Antwort

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

Mai werden Sie ungesetzt von $ dataarray Element hinzufügen sollte, wenn $ innerArray leer bleibt ? – krasipenkov

+1

kann eine andere Logik direkt schreiben .. @krasipenkov aktualisiert es..directly Zugriff auf den Schlüssel und dann nicht gesetzt –

+0

Ja, aber das gewünschte Ergebnis ist, äußere Array-Element nur zu entfernen, wenn alle seine inneren Elemente leer sind ... wenn ich es verstanden habe rechts – 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

Keine Magie nur einfach:

<?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)); 

Ausgang:

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

Während dieses Code-Snippet kann die Frage lösen, [einschließlich einer Erklärung] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) hilft wirklich, die Qualität Ihres Posts zu verbessern. Denken Sie daran, dass Sie die Frage für Leser in der Zukunft beantworten, und diese Leute könnten die Gründe für Ihren Codevorschlag nicht kennen. – andreas

+0

@Andreas mit Kommentaren aktualisiert – cske

Verwandte Themen