<?php
$array = [
[],
['2011','2010', '2012'],
['conference', 'journal', 'conference'],
];
function array_multisort_custom(array &$array, $columnKey, array $order)
{
// guard clause/condition
if (!array_key_exists($columnKey, $array)) {
throw new Exception('Nominated sorting column not found');
}
// pad rows to consistent size
$maxCount = max(array_map('count', $array));
array_walk($array, fn(&$row) => $row = array_pad($row, $maxCount, null));
// populate first sorting parameter with custom order array
$priority = array_flip($order);
$default = count($order);
array_multisort(
array_map(fn($v) => $priority[$v] ?? $default, $array[$columnKey]),
...$array
);
}
array_multisort_custom($array, 2, ['conference', 'journal']);
var_export($array);
preferences:
25.17 ms | 410 KiB | 5 Q