0

多次元配列の一部をフィルタリングしたいと思います。機能を利用させていただきましたarray_filter。フィルタリングされたデータを印刷すると、正しく表示されますが、データを配列に保存できないようです。

これは、フィルターしたい$posted_product_details内部配列 ( ) を含む多次元配列 ( と呼ばれる) です。[data]

Array
(
[column_1] => Array
    (
        [name] => Colour
        [data] => Array
            (
                [0] => Blue
                [1] => Green
                [2] => Red
                [3] => Yellow
                [4] => 
                [5] => 
                [6] => 
                [7] => 
                [8] => 
                [9] => 
            )

    )

[column_2] => Array
    (
        [name] => Pack QTY
        [data] => Array
            (
                [0] => 3
                [1] => 3
                [2] => 3
                [3] => 3
                [4] => 
                [5] => 
                [6] => 
                [7] => 
                [8] => 
                [9] => 
            )

    )

[column_3] => Array
    (
        [name] => Product Code
        [data] => Array
            (
                [0] => 65030
                [1] => 65029
                [2] => 65028
                [3] => 65031
                [4] => 
                [5] => 
                [6] => 
                [7] => 
                [8] => 
                [9] => 
            )

    )

[column_4] => Array
    (
        [name] => Barcode
        [data] => Array
            (
                [0] => 5099570650307
                [1] => 5099570650291
                [2] => 5099570650284
                [3] => 5099570650314
                [4] => 
                [5] => 
                [6] => 
                [7] => 
                [8] => 
                [9] => 
            )

    )

[column_5] => Array
    (
        [name] => 
        [data] => Array
            (
                [0] => 
                [1] => 
                [2] => 
                [3] => 
                [4] => 
                [5] => 
                [6] => 
                [7] => 
                [8] => 
                [9] => 
            )

    )

)

ここでは、配列をループしてデータをフィルタリングしようとしています。

foreach ($posted_product_details as $column => $info) {
    $name = $info['name'];
    $data = $info['data'];
    $info['data'] = array_filter($data);
}

ただし、後で配列を印刷しても、配列は変更されていません。

4

2 に答える 2

1

参照によって値を渡し、元の配列を変更します。

foreach ($posted_product_details as $column => & $info) {
    $name = $info['name'];
    $data = $info['data'];
    $info['data'] = array_filter($data);
}

dataこれにより、配列の一部が正しくフィルタリングされます。ただし、より深い要素を除外する必要がある場合は、このような再帰関数を使用する必要があります。

デモ!

于 2013-11-14T16:35:28.357 に答える
0

foreach コンストラクトは、配列を反復処理するときに、配列の各部分のコピーを作成します。編集するには、元の配列を明示的に呼び出す必要があります。

$posted_product_details[$column]['data'] = array_filter($data);
于 2013-11-14T16:40:01.137 に答える