如果数组中的一个为空,则PHP比较数组并清除所有键

时间:2017-10-26 14:49:00

标签: php arrays foreach

我正在寻找一种比较多重播放阵列的解决方案,如果一个键为空,我想在所有阵列中取消设置。因此,如果[关键字]为空,我想在所有数组[关键字]中取消设置。这是我print_r的数组。

Array
(
    [0] => Array
        (
            [id] => 1
            [pid] => 3
            [sorting] => 128
            [tstamp] => 1503039725
            [title] => test
            [alias] => test-3
            [author] => 1
            [inColumn] => main
            [keywords] => 
            [showTeaser] => 
            [teaserCssID] => 
            [teaser] => 
            [printable] => 
            [customTpl] => 
            [protected] => 
            [groups] => 
            [guests] => 
            [cssID] => 
            [space] => 
            [published] => 1
            [start] => 
            [stop] => 
        )

    [1] => Array
        (
            [id] => 2
            [pid] => 3
            [sorting] => 256
            [tstamp] => 1503045056
            [title] => test 2
            [alias] => test-2
            [author] => 1
            [inColumn] => main
            [keywords] => 
            [showTeaser] => 
            [teaserCssID] => a:2:{i:0;s:0:"";i:1;s:0:"";}
            [teaser] => 
            [printable] => 
            [customTpl] => 
            [protected] => 
            [groups] => 
            [guests] => 
            [cssID] => a:2:{i:0;s:0:"";i:1;s:0:"";}
            [space] => a:2:{i:0;s:0:"";i:1;s:0:"";}
            [published] => 1
            [start] => 
            [stop] => 
        )

)

我到目前为止所尝试的是

print_r($arrResult);

    foreach($arrResult as $Result)
        {   
            foreach ($Result as $arrKey => $arrField)
            {
                if(!empty($arrField)) 
                {
                    $arrAllowedField[$arrKey] = $arrKey;
                }
            }
        }

构建一个包含具有值的键的数组。但问题是,它还会添加其他数组的空字段。

由于

2 个答案:

答案 0 :(得分:1)

// remove empty entries in each array
$ar = array_map('array_filter', $ar);
// find keys having not empty value at least in one array
$temp = array_intersect_key(...$ar);
// save only keys from temp array 
foreach($ar as &$item) {
  $item = array_intersect_key($item, $temp);
}

demo

答案 1 :(得分:0)

它从数组中删除所有空值

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

echo "<pre>";
print_r($arrResult);
  

输出

Array
(
    [0] => Array
        (
            [id] => 1
            [pid] => 3
            [sorting] => 128
            [tstamp] => 1503039725
            [title] => test
            [alias] => test-3
            [author] => 1
            [inColumn] => main
            [published] => 1
        )

)