Cookies en Outbook

Esta web utiliza cookies propias para ofrecer una mejor experiencia. Al navegar, aceptas dichas cookies.
  • Más información acerca de las cookies

Outbook

UI-Dev & more

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).

Publicado

Categorías: