我正在使用以下数组并使用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不保留值,同时仍然将那些空的值打包,如上面结果的最后一个输出所示?
答案 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
并使用默认过滤器。