如何获取数组中的重复项并选择其中一个要在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"
    ]
]

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"
      ]
    ]

Try this:

$myArray = array( 
   ["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"]);

$sectionArr  = array_column($myArray, 'section_id');
$permissionArr = array_column($myArray, 'permission');

array_multisort($sectionArr, SORT_ASC, $permissionArr, SORT_ASC, $myArray);
$newArray = array();
$tempSection = array();
foreach($myArray as $key => $singleArray){
  if(!in_array($singleArray['section_id'], $tempSection)){
      $tempSection[] = $singleArray['section_id'];
      $newArray[] = ["section_id" => $singleArray['section_id'], "permission" => $singleArray['permission']];
    }
}

print_r($newArray);