Как получить дублированные элементы в массиве и выбрать один из них для представления в новом массиве в laravel - PullRequest
0 голосов
/ 25 октября 2018

Я создаю систему пользовательских разрешений для разных разделов приложения Laravel.У меня есть массив массивов и, возможно, есть дублирование в значении section_id, но с другим значением permission.например, у меня section_id => 10 существует 3 раза здесь с разными 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"
    ]
]

Теперь мне нужно получить только самый высокий уровень разрешений, доступный в массиве для дублированного раздела section => 10

A, B и C - уровни разрешений, поэтому приоритет для A, затем B, C для того же раздела, конечный результат должен быть таким:

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

0 голосов
/ 25 октября 2018

Попробуйте это:

$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);
0 голосов
/ 25 октября 2018

Вы можете использовать коллекции, используя цепочки sortBy (), unique () и values ​​() следующим образом:

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

Выходы

    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"
      ]
    ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...