// Created on savesnippets.com ยท https://savesnippets.com/ofjvl8eeQO8IH4 'asc', 'age' => 'desc'] usort($rows, function ($a, $b) use ($columns) { foreach ($columns as $col => $dir) { $av = $a[$col] ?? null; $bv = $b[$col] ?? null; $cmp = $av <=> $bv; if ($cmp !== 0) return strtolower($dir) === 'desc' ? -$cmp : $cmp; } return 0; }); return $rows; } $rows = [ ['name'=>'Bob','age'=>30], ['name'=>'Alice','age'=>25], ['name'=>'Alice','age'=>35], ]; print_r(multiSort($rows, ['name'=>'asc','age'=>'desc']));