Как отсортировать ассоциативный массив по заданным c ключам массива порядка? - PullRequest
0 голосов
/ 19 февраля 2020

Я инициализирую массив в своем абстрактном классе.

И я хочу динамически сортировать этот ассоциативный массив, так как позиция индекса массива оказывает влияние, когда я экспортирую его в файл листа Excel.

public function setExportDetailsData() {
    $headers['barcode']            = Lang::get('core::label.barcode');
    $headers['stockNo']            = Lang::get('core::label.stock.no');
    $headers['productName']        = Lang::get('core::label.product.name');
    $headers['chineseName']        = Lang::get('core::label.chinese.name');
    $headers['category']           = Lang::get('core::label.category');
    $headers['discount2']          = Lang::get('core::label.discount.2');
    $headers['discount3']          = Lang::get('core::label.discount.3');
    $headers['discount4']          = Lang::get('core::label.discount.4');
    $headers['amount']             = Lang::get('core::label.amount');
    $headers['remarks']            = Lang::get('core::label.remarks');
}

Мне нужно изменить порядок в зависимости от сортировки страницы / модуля.

Так, например, порядок сортировки для страницы / модуля 1:

$sorting = [
    'stockNo',
    'barcode',
    'chineseName',
    'productName',
    'category',
    'discount2',
    'discount3',
    'discount4',
    'amount',
    'remarks'
];

А для другой страницы / модуля есть другая сортировка страниц.

Я просто хочу сортировать этот ассоциативный массив динамически в зависимости от страницы / модуля.

1 Ответ

0 голосов
/ 19 февраля 2020
  1. Используйте array_flip, чтобы создать массив с оценкой для каждого столбца:
$scores = array_flip($sorting);
Затем используйте sortBy для сортировки по этому показателю:
return collect($headers)->sortBy(fn ($value, $key) => $scores[$key])->all();
...