24 public static function sortByColumn(
array &$array, $columns, $callbacks =
'', $defaultValueIfNotSetValue =
null, $preserveKeys =
false)
27 if (!is_array($columns))
29 $columns =
array($columns => SORT_ASC);
32 $alreadyFillPreserveDataKeys =
false;
33 foreach ($columns as $column => &
$order)
37 if(is_array($callbacks) && !is_callable($callbacks))
40 if(!empty($callbacks[$column]))
42 $callback = is_callable($callbacks[$column])? $callbacks[$column] :
false;
48 $callback = is_callable($callbacks)? $callbacks :
false;
51 if($callback ===
false)
53 throw new \Bitrix\Main\ArgumentOutOfRangeException(
'callbacks');
57 $valueColumn[$column] =
array();
58 foreach ($array as $index => $row)
60 $value = $row[$column] ?? $defaultValueIfNotSetValue;
63 $value = call_user_func_array($callback,
array($value));
65 $valueColumn[$column][$index] = $value;
66 if($preserveKeys && !$alreadyFillPreserveDataKeys)
68 $preserveDataKeys[$index] = $index;
72 $alreadyFillPreserveDataKeys = $preserveKeys && !empty($preserveDataKeys);
74 $params[] = &$valueColumn[$column];
88 call_user_func_array(
'array_multisort',
$params);
92 $array = array_combine(array_values($preserveDataKeys), array_values($array));