首页 > 解决方案 > PHP:根据值分隔数组

问题描述

我有以下数组:

$raw = [
    [
        'prop1' => 'somevalue',
        'prop2' => 'anothervalue',
        'path' => 'used'
    ],
    [
        'prop1' => 'somevalue',
        'prop2' => 'anothervalue',
        'path' => 'used'
    ],
    [
        'prop1' => 'somevalue',
        'prop2' => 'anothervalue',
        'path' => 'used'
    ],
    [
        'prop1' => 'somevalue',
        'prop2' => 'anothervalue',
        'path' => 'used'
    ],
    [
        'prop1' => 'somevalue',
        'prop2' => 'anothervalue',
        'path' => 'used'
    ],
    [
        'prop1' => 'somevalue',
        'prop2' => 'anothervalue',
        'path' => 'new'
    ],
    [
        'prop1' => 'somevalue',
        'prop2' => 'anothervalue',
        'path' => 'new'
    ],
    [
        'prop1' => 'somevalue',
        'prop2' => 'anothervalue',
        'path' => 'new'
    ],
];

我需要通过这个数组进行过滤,最好使用filter_array以保持代码更干净,我需要根据path属性进行过滤。所以我最终会得到:

$filtered = [
    'used' => [
        [
            'prop1' => 'somevalue',
            'prop2' => 'anothervalue',
            'path' => 'used'
        ],
        [
            'prop1' => 'somevalue',
            'prop2' => 'anothervalue',
            'path' => 'used'
        ],
        [
            'prop1' => 'somevalue',
            'prop2' => 'anothervalue',
            'path' => 'used'
        ],
        [
            'prop1' => 'somevalue',
            'prop2' => 'anothervalue',
            'path' => 'used'
        ],
        [
            'prop1' => 'somevalue',
            'prop2' => 'anothervalue',
            'path' => 'used'
        ]
    ],
    'new' => [
        [
            'prop1' => 'somevalue',
            'prop2' => 'anothervalue',
            'path' => 'new'
        ],
        [
            'prop1' => 'somevalue',
            'prop2' => 'anothervalue',
            'path' => 'new'
        ],
        [
            'prop1' => 'somevalue',
            'prop2' => 'anothervalue',
            'path' => 'new'
        ]
    ]
];

标签: phpfilter

解决方案


您的代码缺少逗号,因此在语法上无效。在下面的演示中查看更新的更正代码。你只需要这个简单的代码:

<?php
  $filtered = array();
  foreach ($raw as $item) {
    $filtered[$item["path"]][] = $item;
  }

输出

Array
(
    [used] => Array
        (
            [0] => Array
                (
                    [prop1] => somevalue
                    [prop2] => anothervalue
                    [path] => used
                )

            [1] => Array
                (
                    [prop1] => somevalue
                    [prop2] => anothervalue
                    [path] => used
                )

            [2] => Array
                (
                    [prop1] => somevalue
                    [prop2] => anothervalue
                    [path] => used
                )

            [3] => Array
                (
                    [prop1] => somevalue
                    [prop2] => anothervalue
                    [path] => used
                )

            [4] => Array
                (
                    [prop1] => somevalue
                    [prop2] => anothervalue
                    [path] => used
                )

        )

    [new] => Array
        (
            [0] => Array
                (
                    [prop1] => somevalue
                    [prop2] => anothervalue
                    [path] => new
                )

            [1] => Array
                (
                    [prop1] => somevalue
                    [prop2] => anothervalue
                    [path] => new
                )

            [2] => Array
                (
                    [prop1] => somevalue
                    [prop2] => anothervalue
                    [path] => new
                )

        )

)

演示: https ://eval.in/1047516


推荐阅读