PHP: Separar elementos de array por sus iniciales

He creado una sencilla función que devolverá los elementos de un array separados por sus letras iniciales.

En primer lugar habría que definir el array:

$lista = array(
	'Assassin\'s Creed',
	'Assassin\'s Creed II',
	'Command & Conquer: Red Alert 3',
	'Call of Duty: World at War',
	'Bayonetta',
	'Dragon Age: Origins',
	'50 Cent: Blood on the Sand',
	'Mini Ninjas',
	'Wipeout HD',
	'Valkyria Chronicles'
);

Y después llamar a la función:

listadoAlfabetico($lista);

La función sería la siguiente:

function listadoAlfabetico ($lista) {
 
 foreach (range('A', 'Z') as $letter) {
  $iniciales[] = $letter;
  // Añadimos letras que no están en el alfabeto inglés
  if ($letter=='C') {$iniciales[] = 'Ç';}
  if ($letter=='N') {$iniciales[] = 'Ñ';}
 }
 
 $i=0;$eliminar = array();
 while ($i<count($iniciales)) {
  $inicial = $iniciales[$i];
  
  $htmlLetra='';
  $j=0;$k=0; while ($j<count($lista)) {
   if ($lista[$j]{0}==$inicial or $lista[$j]{0}==strtolower($inicial)) {
    $htmlLetra .= '<li>'.$lista[$j].'</li>';
    $eliminar[] = $j;
    $k++;
   }
   $j++;
  }
  
  // Si hay elementos con la inicial actual se eliminan del array y se genera el HTML
  if ($k>0) {
   rsort($eliminar);
   $l=0; while ($l<count($eliminar)) {
    $lista = quitarElemento($lista, $eliminar[$l]);
    $l++;
   }
   
   $html .= '<p>'.$inicial.'</p><ul>'.$htmlLetra.'</ul>';
  }
  $eliminar = array();
  $i++;
 }
 
 // Con el resto de elementos se saca el apartado del 0 al 9
 if (count($lista)>0) {
  $htmlLetra='';
  $m=0; while ($m<count($lista)) {
   $selTag='span'; if ($_GET['cliente']==$lista[$m][0]) {$selTag='strong';}
   $htmlLetra .= '<li>'.$lista[$m].'</li>';
   $m++;
  }
  $html .= '<p>0-9</p><ul>'.$htmlLetra.'</ul>';
 }
 
 return $html;
}

function quitarElemento($elementos, $indice) { 
 if (is_array($elementos)) {
  unset($elementos[$indice]);
  if(gettype($indice)!="string") { 
   $listaTemporal=array(); 
   $i=0; 
   foreach ($elementos as $value) {
    $listaTemporal[$i]=$value;
    $i++;
   }
   $elementos=$listaTemporal;
  } 
  return $elementos;
 } 
 else {return false;}
}

Se puede ver el ejemplo o descargarlo (texto plano).