1

私は次の配列を取り、それを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 が値を保持しない場合にのみ配列チャンクを削除するために使用できる方法はありますか?

4

2 に答える 2

1

$valueフィルタリングされたものではなく、元のを内破します。

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

array_filter配列に3つの項目がすべて空であるかどうかをチェックアウトするためにのみ使用します

于 2013-01-22T11:52:47.087 に答える
1

内側の配列自体ではなく、フィルター処理された内側の配列に基づいて外側の配列をフィルター処理します。つまり、それが好きです:

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

編集:また、タイプセーフな比較を行うために保存機能を変更してください

return $value !== '';

そうしないと、「0」のようなアイテムも空として扱われるためです。それがあなたの意図である場合はpreserve、省略してデフォルトのフィルターを使用することもできます.

于 2013-01-22T11:53:21.907 に答える