仅当所有值都为空时才从数组块中删除值

时间:2013-01-22 11:45:44

标签: php arrays

我正在使用以下数组并使用array_chunk将其分成3个项目的较小数组;

$array = array('1', '1', '1', '', '', '', '3', '3', '3', '4', '4', '4');

以下函数和每个语句......

function preserve($value){
    if ($value != '') {
        return TRUE;
    } else {
        return FALSE;
    }
}

$chunk = array_chunk($array, 3, true);

foreach ($chunk as $value){
    $chunk = array_filter($value, 'preserve');  

    if($chunk){
        $separated = implode("|", $chunk);
        echo $separated . '<br/>';
    }
}

...丢弃产生此结果的数组中显示的空值:

1|1|1
3|3|3
4|4|4

接下来,

如果数组如下所示:

$array = array('1', '1', '1', '', 'A', '', '3', '3', '3', '4', '4', '4');

结果如下:

1|1|1
A
3|3|3
4|4|4

当我需要结果时:

1|1|1
 |A|
3|3|3
4|4|4

无论如何,我可以使用array_filter只删除数组块,如果它的所有值都为空,并且IF不保留值,同时仍然将那些空的值打包,如上面结果的最后一个输出所示?

2 个答案:

答案 0 :(得分:1)

内爆原始$value,而非过滤后的内容:

$separated = implode("|", $value);

您只能使用array_filter检查数组中是否包含所有3个项目

答案 1 :(得分:1)

您希望根据已过滤的内部数组过滤外部数组,而不是内部数组本身。即那样:

$chunks = array_filter($chunks, function($values) {
    return count(array_filter($values, 'preserve')) > 0;
});

编辑:还会更改保留功能以进行类型安全比较

return $value !== '';

因为否则像'0'这样的项也会被视为空。如果这是您的意图,您也可以省略preserve并使用默认过滤器。