gettype($b); } else { return $a <=> $b; } } /** * Sort an array by its values, recursively * @param array &$array */ function sortRecursively(array &$array): void { // Sequential array, re-index after sorting if (array_keys($array) === range(0, count($array) - 1)) { usort($array, 'byTypeAndValue'); } // Associative array, maintain keys else { uasort($array, 'byTypeAndValue'); } foreach ($array as &$value) { if (is_array($value)) { sortRecursively($value); } } }