Метод Bitrix\Main\Type\Collection::sortByColumn представляет собой статический метод, который позволяет сортировать массивы по значениям одной или нескольких колонок. Это особенно полезно, когда вы работаете с массивом/ассоциативным массивов ассоциативных массивов (замудренно как 😬) и хотите упорядочить их по определенным критериям.
Описание метода
Прототип метода выглядит следующим образом:
public static function sortByColumn(
array &$array, // массив, который нужно отсортировать
$column, // колонка или массив колонок, по которым будет производиться сортировка
array $callbacks = '', // необязательный параметр, массив обратных вызовов для пользовательских функций сортировки.
$defaultValueIfNotSetValue = null, // необязательный параметр, значение по умолчанию, если в колонке нет значения.
$preserveKeys = false // необязательный параметр, указывающий на необходимость сохранения ключей массива.
): void
1. Простая сортировка по одной колонке
use Bitrix\Main\Type\Collection;
$products = [
['name' => 'Телефон', 'price' => 20000],
['name' => 'Планшет', 'price' => 30000],
['name' => 'Ноутбук', 'price' => 40000]
];
Collection::sortByColumn($products, 'price');
В этом примере массив $products будет отсортирован по цене в порядке возрастания.
2. Сортировка по нескольким колонкам
Collection::sortByColumn($products, ['price' => SORT_DESC, 'name' => SORT_ASC]);
Здесь массив $products будет сначала отсортирован по цене по убыванию, а затем — по имени по возрастанию.
3. Использование пользовательских функций сортировки
Collection::sortByColumn($products, ['name' => SORT_ASC], ['name' => 'mb_strlen']);
В данном случае сортировка производится по длине строки имени продукта в порядке возрастания.
4. Сохранение ключей массива
Collection::sortByColumn($products, 'price', [], null, true);
При установке параметра $preserveKeys в true, ключи исходного массива $products будут сохранены после сортировки.