2017-10-03 4 views
0

Ich möchte ein Array filtern, das durch Konvertierung von XML in ein Array erstellt wird. Ich möchte alle übergeordneten Schlüssel von Arrays mit Schlüssel = 0 und einem leeren Wert (zB "InvalidKey") entfernen, aber nicht diejenigen mit einem benutzerdefinierten Namen und keinen Wert (zB "Spalte"). Ich habe bereits array_filter verwendet (auch in Kombination mit array_map), aber diese Funktionen filtern zu wenig oder zu viele Informationen aus dem Array. Ich habe auch versucht, eine loopable-Funktion zu erstellen, um zu überprüfen, ob das aktuelle Array einen Schlüssel von 0 und einen leeren Wert hat, aber ich weiß nicht, wie Sie den übergeordneten Schlüssel des aktuellen Arrays erhalten, zB:Leere Array-Elemente eines mehrdimensionalen Arrays ausfiltern

Array 
(
    [InvalidKey] => Array 
     (
      [0] => *NULL* 
     ) 
); 

key($arrInput) = 0; 
parent::key($arrInput) = "InvalidKey"; 
So

, wie aus zu bekommen:

Array 
(
    [test] => 
    [demo] => 524018 
    [column] => 
    [xml] => Array 
    (
     [Header] => Array 
      (
       [0] => Array 
        (
         [ValidKey] => Array 
          (
           [0] => 1234 
          ) 

         [InvalidKey] => Array 
          (
           [0] => 
          ) 
        ) 

      ) 

     [Body] => Array 
      (
       [0] => *NULL* 
      ) 

     [Footer] => Array 
      (
       [0] => Array 
        (
         [ValidKey] => Array 
          (
           [0] => I am valid 
          ) 

         [MoreValidKey] => Array 
          (
           [0] => I am valid too 
          ) 

         [InvalidKey] => Array 
          (
           [0] => 
          ) 
        ) 

      ) 

    ) 
) 

an:

Array 
(
    [test] => 
    [demo] => 524018 
    [column] => 
    [xml] => Array 
    (
     [Header] => Array 
      (
       [0] => Array 
        (
         [ValidKey] => Array 
          (
           [0] => 1234 
          ) 
        ) 

      ) 

     [Footer] => Array 
      (
       [0] => Array 
        (
         [ValidKey] => Array 
          (
           [0] => I am valid 
          ) 

         [MoreValidKey] => Array 
          (
           [0] => I am valid too 
          ) 
        ) 

      ) 

    ) 
) 

PS: Die verwendeten Array Schlüsselnamen sind variabel. Zur Vereinfachung habe ich "(In) ValidKey" verwendet. Das Array kann so tief wie möglich sein, daher kann ich mit 2 for loops nicht auskommen.

+1

Mögliches Duplikat [? Wie leere Werte von mehrdimensionalen Arrays in PHP entfernen] (https://stackoverflow.com/questions/10214531/how-to-remove-empty-values -from-multidimensional-array-in-php) – Companjo

Antwort

1

Sie müssen ein benutzerdefiniertes Skript schreiben, das alle Elemente Ihres Arrays überprüft.

Beispiel:

<?php 
$test = [ 
    [ 
     [ 
      "asdf", 
      "", 
      0, 
      false, 
      true, 
      [ 
       "asdf", 
       "", 
       [] 
      ] 
     ], 
     [] 
    ], 
    [] 
]; 

function removeEmptyElements(array $array) 
{ 
    foreach ($array as $key => $value) { 
     if (is_array($value)) 
      $value = removeEmptyElements($value); 

     if (empty($value) && false !== $value && 0 !== $value) 
      unset($array[$key]); 
     else 
      $array[$key] = $value; 
    } 

    return $array; 
} 

print_r(removeEmptyElements($test)); 
+0

@eaunitrust Das sollte funktionieren. –

+0

Danke @Neodan! Dies funktionierte mit einer kleinen Änderung, um nur die Array-Schlüssel mit Schlüssel = 0 zu filtern. – eaunitrust

Verwandte Themen