douqiang7462 2018-08-14 13:26
浏览 63
已采纳

PHP:基于值分离数组

I have got the following array:

$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'
    ],
];

I need to filter through this array, preferably using filter_array to keep the code cleaner, I need to filter based on the path property. So I would end up with:

$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'
        ]
    ]
];
  • 写回答

1条回答 默认 最新

  • douyi1963 2018-08-14 13:29
    关注

    Your code lacks commas, so it's syntactically invalid. See the updated corrected code in the demo below. You just need this simple code:

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

    Output

    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
                    )
    
            )
    
    )
    

    Demo: https://eval.in/1047516

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装
  • ¥40 复杂的限制性的商函数处理