dotn30471 2018-10-25 08:42
浏览 77

如何获取数组中的重复项并选择其中一个要在laravel中的新数组中显示

I am building custom permissions system for different sections of a Laravel application. I have an array of arrays and maybe there is a duplication in the section_id value but with different permission value. for example i have section_id => 10 exists 3 times here with different 3 permission.

[
    0 => array:2 [▼
      "section_id" => 10
      "permission" => "B"
    ]
    1 => array:2 [▼
      "section_id" => 22
      "permission" => "A"
    ]
    2 => array:2 [▼
      "section_id" => 10
      "permission" => "A"
    ]
    3 => array:2 [▼
      "section_id" => 13
      "permission" => "B"
    ]
    4 => array:2 [▼
      "section_id" => 18
      "permission" => "B"
    ]
    5 => array:2 [▼
      "section_id" => 10
      "permission" => "C"
    ]
]

Now I need to get only the highest permission level available in the array for the duplicated section section => 10

A,B and C are the permissions levels so the priority for A then B then C for the same section , the final result should be like this

[    
    0 => array:2 [▼
      "section_id" => 10
      "permission" => "A"
    ]
    1 => array:2 [▼
      "section_id" => 22
      "permission" => "A"
    ]
    2 => array:2 [▼
      "section_id" => 13
      "permission" => "B"
    ]
    3 => array:2 [▼
      "section_id" => 18
      "permission" => "B"
    ]
]
  • 写回答

2条回答 默认 最新

  • douting1871 2018-10-25 09:11
    关注

    You can use collections using sortBy(), unique() and values() chain in this way:

    public function test() {
        $p = [
            [
                'section_id' => 10,
                'permission' => 'B'
            ],
            [
                'section_id' => 22,
                'permission' => 'A'
            ],
            [
                'section_id' => 10,
                'permission' => 'A'
            ],
            [
                'section_id' => 13,
                'permission' => 'B'
            ],
            [
                'section_id' => 18,
                'permission' => 'B'
            ],
            [
                'section_id' => 10,
                'permission' => 'C'
            ],
        ];
    
        $collection = collect($p);
        $sorted = $collection->sortBy(function ($product, $key) {
            return ord($product['permission']);
        })->unique('section_id')->values()->all();
        dd($p, $sorted);
    }
    

    Outputs

        array:6 [▼
          0 => array:2 [▼
            "section_id" => 10
            "permission" => "B"
          ]
          1 => array:2 [▼
            "section_id" => 22
            "permission" => "A"
          ]
          2 => array:2 [▼
            "section_id" => 10
            "permission" => "A"
          ]
          3 => array:2 [▼
            "section_id" => 13
            "permission" => "B"
          ]
          4 => array:2 [▼
            "section_id" => 18
            "permission" => "B"
          ]
          5 => array:2 [▼
            "section_id" => 10
            "permission" => "C"
          ]
        ]
        array:4 [▼
          0 => array:2 [▼
            "section_id" => 22
            "permission" => "A"
          ]
          1 => array:2 [▼
            "section_id" => 10
            "permission" => "A"
          ]
          2 => array:2 [▼
            "section_id" => 13
            "permission" => "B"
          ]
          3 => array:2 [▼
            "section_id" => 18
            "permission" => "B"
          ]
        ]
    
    评论

报告相同问题?

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?