public static function columnOrder(array $columns, array $array)
{
if (!$columns) {
return $array;
}
$keys = array_fill_keys($columns, null);
$keyed = array_intersect_key($array, $keys);
$arrayLeftover = array_diff_key($array, $keyed);
$keysLeftover = array_diff_key($keys, $keyed);
$target = array();
if ($keysLeftover) {
foreach ($arrayLeftover as $key => $value) {
if (is_string($key)) {
continue;
}
$target[key($keysLeftover)] = $value;
unset($arrayLeftover[$key]);
next($keysLeftover);
if (null === key($keysLeftover)) {
break;
}
}
}
$result = array_merge($keys, $keyed, $keysLeftover, $target, $arrayLeftover);
return $result;
}