【问题标题】:Filter part of multidimensional array过滤部分多维数组
【发布时间】:2013-11-27 18:51:34
【问题描述】:

我想过滤多维数组的一部分。我使用了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);
}

但是,之后打印数组时,数组并没有改变。

【问题讨论】:

    标签: php multidimensional-array array-filter


    【解决方案1】:

    通过引用传递值来修改原始数组:

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

    这将正确过滤数组的data 部分。但是,如果您需要过滤掉更深层次的元素,则必须使用递归函数,例如 this one

    Demo!

    【讨论】:

      【解决方案2】:

      foreach 结构会在您迭代数组的每个部分时对其进行复制。您必须显式调用原始数组来编辑它:

      $posted_product_details[$column]['data'] = array_filter($data);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-09
        • 2016-09-28
        • 2021-05-24
        • 2018-09-20
        相关资源
        最近更新 更多