Сортировка в массиве PHP на основе пользовательских предпочтений - PullRequest
1 голос
/ 20 июня 2019

У меня есть php-массив стран, которые я хочу отсортировать в определенном порядке, основываясь на запросах нашего клиента.

Массив в настоящее время передается из нашего бэкэнда, который я не могу контролировать, как показано ниже:


        array(10) {
  ["AUD"]=>
  string(17) "Australian Dollar"
  ["GBP"]=>
  string(22) "British Pound Sterling"
  ["CAD"]=>
  string(15) "Canadian Dollar"
  ["DKK"]=>
  string(12) "Danish Krone"
  ["EUR"]=>
  string(4) "Euro"
  ["JPY"]=>
  string(12) "Japanese Yen"
  ["NOK"]=>
  string(15) "Norwegian Krone"
  ["RUB"]=>
  string(13) "Russian Ruble"
  ["SEK"]=>
  string(13) "Swedish Krona"
  ["USD"]=>
  string(9) "US Dollar"
}

Мне нужно изменить порядок, исходя из предпочтений клиента, чтобы он был похож на

        array(10) {
  ["GBP"]=>
  string(22) "British Pound Sterling"
  ["AUD"]=>
  string(17) "Australian Dollar"
  ["NOK"]=>
  string(15) "Norwegian Krone"
  ["RUB"]=>
  string(13) "Russian Ruble"
  ["USD"]=>
  string(9) "US Dollar"
  ["CAD"]=>
  string(15) "Canadian Dollar"
  ["DKK"]=>
  string(12) "Danish Krone"
  ["EUR"]=>
  string(4) "Euro"
  ["JPY"]=>
  string(12) "Japanese Yen"
  ["SEK"]=>
  string(13) "Swedish Krona"

}

Единственный способ, которым я мог подумать, это сделать оператор switch,

            $ordered_currencies = Array();
        ?>
        <?php foreach ($currencies as $_code => $_name): 
                switch ($_code) {
            case 'AUD':
            $ordered_currencies[0] = [$_code => $_name];
                break;
            case 'CAD':
            $ordered_currencies[1] = Array($_code => $_name);
                break;
            case 'GBP':
            $ordered_currencies[2] = Array($_code => $_name);
                break;
            case 'DKK':
            $ordered_currencies[3] = Array($_code => $_name);
                break;
            case 'EUR':
            $ordered_currencies[4] = Array($_code => $_name);
                break;
            case 'JPY':
            $ordered_currencies[5] = Array($_code => $_name);
                break;
            case 'RUB':
            $ordered_currencies[6] = Array($_code => $_name);
                break;
            case 'SEK':
            $ordered_currencies[7] = Array($_code => $_name);
                break;
            case 'USD':
            $ordered_currencies[8] = Array($_code => $_name);
                break;
        }
         endforeach; ?>

Но это возвращает массив в следующем формате, который мне не нужен

 array(10) {
[0]=>
  array(1) {
    ["AUD"]=>
    string(17) "Australian Dollar"
  }
  [2]=>
  array(1) {
    ["GBP"]=>
    string(22) "British Pound Sterling"
  }
  [1]=>
  array(1) {
    ["CAD"]=>
    string(15) "Canadian Dollar"
  }
.....

Есть идеи?

1 Ответ

1 голос
/ 20 июня 2019

Вы можете хранить предпочтения клиента в виде массива кодов валют и принимать значения от $currencies в следующем порядке:

$preferences = ['AUD', 'CAD', 'GBP'];
$sortedCurrencies = [];
foreach ($preferences as $preference) {
    $sortedCurrencies[$preference] = $currencies[$preference];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...