@Erimax

Как сортировать такой массив?

Есть массивы:

$currencyLists = ["USD", "EUR", "GBP"];

$lots = [
	["currency" => "EUR", "lotSize" => 1],
	["currency" => "GBP", "lotSize" => 1000],
	["currency" => "EUR", "lotSize" => 1000],
	["currency" => "USD", "lotSize" => 1],
	["currency" => "GBP", "lotSize" => 1],
	["currency" => "USD", "lotSize" => 1000],
];

Нужно сортировать валюту как списке, лоты тоже должны быть сортированы по возрастанию. То есть, на выходе должно быть вот так:

$lots = [
	["currency" => "USD", "lotSize" => 1],
	["currency" => "USD", "lotSize" => 1000],
	["currency" => "EUR", "lotSize" => 1],
	["currency" => "EUR", "lotSize" => 1000],
	["currency" => "GBP", "lotSize" => 1],
	["currency" => "GBP", "lotSize" => 1000],
];
  • Вопрос задан
  • 204 просмотра
Решения вопроса 1
@Akela_wolf
Extreme Programmer
В PHP есть функция usort, которая позволяет определить правило сортировки в виде пользовательской функции сравнения. См. пример номер 5 в документации по ссылке.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Adamos
@Adamos
Написать функцию сравнения, которая сначала сравнивает позиции валют в предопределенном списке, а при их равенстве - второе значение.
И использовать штатную функцию сортировки массива с пользовательской функцией.
Ответ написан
Комментировать
0xD34F
@0xD34F
usort($lots, function($a, $b) use($currencyLists) {
  $ia = array_search($a['currency'], $currencyLists);
  $ib = array_search($b['currency'], $currencyLists);
  $t = $ia - $ib;

  return $t ? $t : ($a['lotSize'] - $b['lotSize']);
});
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы