2016-10-15 8 views
1

空の配列を削除する際に問題があります。以下のよう 私の配列が見えます:常に(倉庫と価格)2つのキーを持っているいくつかのルールで配列の空要素を削除する

Array 
(
    [Women] => Array 
     (
      [S] => Array 
       (
        [warehouse] => 22 
        [price] => 21212 
       ) 

      [M] => Array 
       (
        [warehouse] => 
        [price] => 
       ) 

      [L] => Array 
       (
        [warehouse] => 
        [price] => 
       ) 

      [XL] => Array 
       (
        [warehouse] => 
        [price] => 
       ) 

      [XXL] => Array 
       (
        [warehouse] => 
        [price] => 
       ) 

     ) 
    [Men] => Array 
     (
      [S] => Array 
       (
        [warehouse] => 22 
        [price] => 
       ) 

      [M] => Array 
       (
        [warehouse] => 
        [price] => 
       ) 

      [L] => Array 
       (
        [warehouse] => 
        [price] => 
       ) 

      [XL] => Array 
       (
        [warehouse] => 
        [price] => 
       ) 

      [XXL] => Array 
       (
        [warehouse] => 
        [price] => 
       ) 

     ) 
) 

最後の子

マイコード:

$value = $this->$attribute; 
$check = function($haystack) use(&$check) 
{ 
    foreach ($haystack as $key => $value) { 
     if (is_array($value)) { 
      $haystack[$key] = $check($haystack[$key]); 
     } 

     if (empty($haystack[$key])) { 
      unset($haystack[$key]); 
     } 
    } 

    return $haystack; 
}; 

var_dump( $check($value)); 

結果:

Array 
(
    [Women] => Array 
     (
      [S] => Array 
       (
        [warehouse] => 22 
        [price] => 21212 
       ) 

     ) 

    [Men] => Array 
     (
      [S] => Array 
       (
        [warehouse] => 22 
       ) 

     ) 
) 

その作業が、私の問題は、最後のレベルには倉庫キーしかないので、 'Men配列'を削除する必要があるということです2つのキーを訂正してください)。 私が望む結果を得るために私の機能を変えるには?

+1

使用[array_filter(http://php.net/manual/en/function.array-filter.php) - 参照[場合多次元配列要素を空の削除全体サブアレイPHP](HTTP: //stackoverflow.com/questions/35490098/multidimensional-array-element-if-empty-delete-entire-sub-array-php#35495083) – Anish

+0

コードについての詳しい説明が必要です。$ haystackには – Calvin

答えて

0

は$配列は、この
`

Array 
(
    [Women] => Array 
     (
      [S] => Array 
       (
        [warehouse] => 22 
        [price] => 21212 
       ) 
     [M] => Array 
      (
       [warehouse] => 
       [price] => 
      ) 

     [L] => Array 
      (
       [warehouse] => 
       [price] => 
      ) 

     [XL] => Array 
      (
       [warehouse] => 
       [price] => 
      ) 

     [XXL] => Array 
      (
       [warehouse] => 
       [price] => 
      ) 

    ) 
[Men] => Array 
    (
     [S] => Array 
      (
       [warehouse] => 22 
       [price] => 
      ) 

     [M] => Array 
      (
       [warehouse] => 
       [price] => 
      ) 

     [L] => Array 
      (
       [warehouse] => 
       [price] => 
      ) 

     [XL] => Array 
      (
       [warehouse] => 
       [price] => 
      ) 

     [XXL] => Array 
      (
       [warehouse] => 
       [price] => 
      ) 
    ) 
) 


はその後、各配列のキーの女性を繰り返す含むされている場合、そのキーのそれぞれの男性は、私たちは、XL賞品のいずれかがある場合はS、M、Lに反復します欠落している要素を取り除き、最後に反復の段階で女性と男性のサイズをチェックします。サイズがなければ性別キーを解除します。

foreach($array as $gender => $array_val){ 
    foreach($gender as $size=>$size_val){ 
    if(empty($size_val)){ 
     unset($array[$gender][$size]); 
    } 
    } 
    if(count($array[$gender])==0) unset($array[$gender]); 
} 
var_dump($array); 
+0

が含まれています私を理解していない。最後の親の両方のパラメータ(倉庫と価格)が空の場合、配列は設定解除されている必要があります –

+0

申し訳ありませんが、男性の配列サイズは削除されていますか? – Calvin

+0

私は答えを更新しました。 – Calvin

関連する問題