У меня есть проблема, которая может показаться очень простой, но я не могу найти простого решения, и я думаю, что оно должно быть.
У меня есть массив, который мне нужно привести в определенном порядке.
$arr1 = [
['code' => 555, 'amount' => 100],
['code' => 555, 'amount' => 200],
['code' => 555, 'amount' => 300],
['code' => 222, 'amount' => 100],
['code' => 222, 'amount' => 200],
['code' => 222, 'amount' => 300],
['code' => 777, 'amount' => 100],
['code' => 777, 'amount' => 200],
['code' => 777, 'amount' => 300]
]
И я хотел бы привести его в таком порядке:
$sortedArr = [
['code' => 555, 'amount' => 100],
['code' => 222, 'amount' => 100],
['code' => 777, 'amount' => 100],
['code' => 555, 'amount' => 200],
['code' => 222, 'amount' => 200],
['code' => 777, 'amount' => 200],
['code' => 555, 'amount' => 300],
['code' => 222, 'amount' => 300],
['code' => 777, 'amount' => 300]
]
Если это поможет, у меня есть другой массив с точным порядком кодов.
$codes = [555, 222, 777];
Любая помощь приветствуется! Спасибо!
Вы можете использовать усортировать с пользовательской функцией сравнения.
Существует простое решение, если вы используете специальный класс PHP.
$codes = [555, 222, 777];
$sortedArr = tableArray::create($arr1)
->addSQLfunction('weight',function($v) use($codes){
$order = array_search($v,$codes);
return $order !== false ? $order : PHP_INT_MAX;
})
->orderBy('amount ASC, weight(code) ASC')
->fetchAll()
;
//class: https://github.com/jspit-de/tableArray
Спасибо! Более элегантно, чем мое решение.
Возможный дубликат Как я могу сортировать массивы и данные в PHP?