1. $items = ArrayHelper::multiPropertySort($items, [
    2. ['column' => 'first_ap_date', 'order' => 'asc'],
    3. ['column' => 'name', 'order' => 'asc'],
    4. ['column' => 'status', 'order' => 'asc'],
    5. ]);
    6. public static function multiPropertySort(Collection $collection, array $sorting_instructions)
    7. {
    8. return $collection->sort(function ($a, $b) use ($sorting_instructions) {
    9. foreach ($sorting_instructions as $sorting_instruction) {
    10. $a[$sorting_instruction['column']] = (isset($a[$sorting_instruction['column']])) ? $a[$sorting_instruction['column']] : '';
    11. $b[$sorting_instruction['column']] = (isset($b[$sorting_instruction['column']])) ? $b[$sorting_instruction['column']] : '';
    12. if (empty($sorting_instruction['order']) or strtolower($sorting_instruction['order']) == 'asc') {
    13. $x = static::numGreater($a[$sorting_instruction['column']], $b[$sorting_instruction['column']]);
    14. } else {
    15. $x = static::numGreater($b[$sorting_instruction['column']], $a[$sorting_instruction['column']]);
    16. }
    17. if ($x != 0) {
    18. return $x;
    19. }
    20. }
    21. return 0;
    22. })->values();
    23. }