用一些规则删除数组中的空元素


Remove empty elements of array with some rules

我有问题,删除空数组。我的数组看起来像:

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

它的工作,但我的问题是,"男人数组"应该被删除,因为最后一级只有仓库键(正确的两个键)。如何改变我的功能得到我想要的结果?

如果$array包含这个
'

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


然后迭代每个数组键women, men在每个键中我们将迭代到s,m,l,xl如果任何一个元素缺失我们将取消设置,最后迭代我们将检查女性和男性的大小,如果其中一个没有大小我们将取消设置性别键

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