2017-10-03 12 views
0

XMLを配列に変換して作成された配列をフィルタリングしたいと思います。 key = 0で空の値(f.e. "InvalidKey")を持つ配列のすべての親キーを削除したいのですが、カスタム名と値を持たない配列(f.e. "column")は削除しません。 array_mapと組み合わせてもarray_filterはすでに使用していますが、これらの関数は配列からの情報をあまりにも少なすぎたり、あまりにも多くフィルタリングします。 また、現在の配列に0のキーと空の値があるかどうかを調べるループ可能な関数を作成しようとしましたが、現在の配列feの親キーを取得する方法がわかりません。多次元配列の空の配列要素をフィルターにかける

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

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

ので、から取得する方法:

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] => 
          ) 
        ) 

      ) 

    ) 
) 

へ:

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:使用する配列のキー名が可変です。簡単にするために、私は "(In)ValidKey"を使用しました。配列は可能な限り深いレベルにすることができるので、2 forループでは十分ではありません。

+1

可能な複製(https://stackoverflow.com/questions/10214531/how-to-remove-empty-values [PHPで多次元配列から空の値を削除する方法?] -from-multidimensional-array-in-php) – Companjo

答えて

1

アレイのすべての要素をチェックするカスタムスクリプトを作成する必要があります。

例:の

<?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これは動作するはずです。 –

+0

ありがとう@Neodan!これは小さな編集でキー= 0の配列キーのみをフィルタリングするのに役立ちました。 – eaunitrust