Foros del Web » Programando para Internet » PHP »

Mostrar primera letra en listado

Estas en el tema de Mostrar primera letra en listado en el foro de PHP en Foros del Web. Hola: Estuve buscando en el foro y no encontre respuesta a lo que necesito hacer, quizás porque no supe buscar. Tengo un listado de categorias ...
  #1 (permalink)  
Antiguo 10/01/2008, 12:58
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 5 meses
Puntos: 0
Mostrar primera letra en listado

Hola:

Estuve buscando en el foro y no encontre respuesta a lo que necesito hacer, quizás porque no supe buscar.

Tengo un listado de categorias generadas por BD que se muestran asi:

Oganización de Eventos
Opticas
Orfebrería
Organización de Eventos
Ornamentación
Papelerías
Papeles
Parqueaderos
Peluquerías
Peluqueros
Perfumerías
Periódicos y Revistas
Piedras Preciosas
Pintores
Plomeros
Profesores
Propaganda
Publicistas
Radiotécnicos
Refrigeración
Relojerías
Reposterías
Restaurantes

Lo que quisiera es que se mostraran asi:

O

Oganización de Eventos
Opticas
Orfebrería
Organización de Eventos
Ornamentación

P

Papelerías
Papeles
Parqueaderos
Peluquerías
Peluqueros
Perfumerías
Periódicos y Revistas
Piedras Preciosas
Pintores
Plomeros
Profesores
Propaganda
Publicistas

R

Radiotécnicos
Refrigeración
Relojerías
Reposterías
Restaurantes

Es decir, que el listado se divida por letra y la muestre tipo titulo

Como se podria hacer?

Gracias
  #2 (permalink)  
Antiguo 10/01/2008, 13:05
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Re: Mostrar primera letra en listado

No sé si habrá alguna función que haga algo parecido, puedes buscar en el manual, en la sección de arrays a ver si encuentras algo que te meta en un array lo que necesitas.....

Sino lo puede hacer "a mano". La lógica a seguir sería:

bucle que recorra todos los resultados:

comprobar si la primera letra de la palabra actual es igual que la primea letra de la palabra anterior (habría que inicializar la variable de letra_anterior fuera del bucle, para la primera iteración)

si no es igual, se muestra la letra, salto de linea y se asigna el valor de la letra a la variable letra_anterior

se muestra la palabra

fin del bucle


¿Se entiende?
  #3 (permalink)  
Antiguo 10/01/2008, 13:09
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 5 meses
Puntos: 0
Re: Mostrar primera letra en listado

Jajajaja, para nada, pense que hablabas en algun idioma del medio oriente!

Mis conocimientos en php son algo pobres, apenas estoy estudiando por lecciones.

Se lo que es un array y mas o menos comprendo lo de bucles pero no sabri como montar algo asi.
  #4 (permalink)  
Antiguo 10/01/2008, 13:20
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Re: Mostrar primera letra en listado

Código PHP:

$letra_anterior 
"";
while(
$row mysql_fetch_array($id_result)) { 

    
$letra_actual substr($row['campo'], 01); // Metemos en una variable la primera letra de la palabra.
    
if (!strcasecmp($letra_anterior,$letra_actual)) { // comparamos ambas letras
        
$letra anterior $letra_actual;
        echo 
"$letra_actual <br/>";
    }
    echo 
"$row['campo'] <br/>";

 } 
$id_result es el resultado de la consulta a la BDD
campo es el campo de la tabla donde están las palabras.


No he comprobado que funcione, pero tienes por donde empezar.
  #5 (permalink)  
Antiguo 10/01/2008, 13:22
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 5 meses
Puntos: 0
Re: Mostrar primera letra en listado

Gracias Keysher, voy a probar
  #6 (permalink)  
Antiguo 10/01/2008, 13:28
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 5 meses
Puntos: 0
Re: Mostrar primera letra en listado

Probado...

Primero me toco corregir aqui:

$letra anterior = $letra_actual;

Y colocar asi:

$letra_anterior = $letra_actual;

Tambien cambie $id_result por $result

Monte el codigo + consulta y me tira este error:

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\AppServ\www\xxxxxxxx\categorias.php on line 15

Pongo el codigo a ver

Código PHP:
<?php
include ("connect.php");

$sql="SELECT * FROM categorias ORDER BY categoria";
$result=mysql_query($sql);

$letra_anterior "";
while(
$row mysql_fetch_array($result)) { 

    
$letra_actual substr($row['categoria'], 01); // Metemos en una variable la primera letra de la palabra.
    
if (!strcasecmp($letra_anterior,$letra_actual)) { // comparamos ambas letras
        
$letra_anterior $letra_actual;
        echo 
"$letra_actual <br/>";
    }
    echo 
"$row['categoria'] <br/>";

 }
?>
  #7 (permalink)  
Antiguo 10/01/2008, 13:36
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Re: Mostrar primera letra en listado

Prueba a pones los echos así:
echo $letra_actual.'<br/>';
echo $row['categoria'].'<br/>';
  #8 (permalink)  
Antiguo 10/01/2008, 14:03
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 5 meses
Puntos: 0
Re: Mostrar primera letra en listado

Ahora no da error y muestra el listado pero como siempre:

Contadores P�blicos
Corredores de Seguros
Cristaler�as
Cueros
Decoraciones
Detectives Privados
Dibujantes
Discos
Dise�adores
Diversi�n y Entretenimiento
Droguer�as y Farmacias
Economistas
Edici�n de Audio y Video
Editoriales
Electricistas
Electrodom�sticos
Electr�nica
Embajadas y Consulados

Es decir, sin la letra arriba dividiendo el listado
  #9 (permalink)  
Antiguo 10/01/2008, 14:16
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Re: Mostrar primera letra en listado

Ha habido un fallo de concepto.

Prueba con el if así:

Código PHP:

if (!strcasecmp($letra_anterior,$letra_actual) || (letra_anterior=="")) { 
  #10 (permalink)  
Antiguo 10/01/2008, 14:30
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 5 meses
Puntos: 0
Re: Mostrar primera letra en listado

Nada, muestra listado pero sin las letras...

Código PHP:
<?php
include ("connect.php");

$sql="SELECT DISTINCT categoria FROM categorias ORDER BY categoria";
$id_result=mysql_query($sql);

$letra_anterior "";
while(
$row mysql_fetch_array($id_result)) { 

    
$letra_actual substr($row['categoria'], 01); // Metemos en una variable la primera letra de la palabra.
    
if (!strcasecmp($letra_anterior,$letra_actual) || (letra_anterior=="")) { // comparamos ambas letras
        
$letra_anterior $letra_actual;
        echo 
$letra_actual.'<br/>';
    }
    echo 
$row['categoria'].'<br/>';

 }
?>
  #11 (permalink)  
Antiguo 10/01/2008, 14:38
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Re: Mostrar primera letra en listado

Código PHP:

if (!strcasecmp($letra_anterior,$letra_actual) || ($letra_anterior=="")) { 
  #12 (permalink)  
Antiguo 10/01/2008, 14:47
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 5 meses
Puntos: 0
Re: Mostrar primera letra en listado

Upssss...

A
Abogados
A
Academias e Institutos
A
Acciones y Valores
A
Aceros
A
Administradoras
A
Adornos
A
Agencias de Aduana
A
Agencias de Empleo
A
Agencias de Modelos
A
Agencias de Publicidad
A
Agencias de Viajes
A
Agropecuaria
A
Aire Acondicionado
A
Alarmas
A
Alimentos y Comestibles
A
Almacenes por Departamentos
A
Alquiler de Pel�culas
A
Alquiler de Veh�culos
A
Ambulancias
A
Animales
A
Arquitectos
A
Artes Gr�ficas
A
Artesanos
A
Art�culos Deportivos
A
Art�culos M�dicos
A
Art�stas
A
Aseo y Limpieza
A
Asesores
A
Asociaciones
A
Auditores
A
Autom�viles
A
Avisos para Exteriores
Bancos
Banderas
Banqueteros
Belleza y Est�tica
Bibliotecas
Bicicletas
Bingos y Casinos
Bolsas y Empaques
Caf� Internet
Cajas y Envases
Canales de Televisi�n
Canchas Deportivas
Carga A�rea
Carga Terrestre
Carpinteros y Ebanistas
Casas de Cambio
Casas de Empe�o
Casas de Modas
Cementerios
Centros Comerciales
Centros Culturales
Centros M�dicos
Centros Vacacionales
Cerrajer�as
Cerrajeros
Cigarrer�as y Licorer�as
Cl�nicas y Hospitales
Clubes
Combustibles
Computadores
Construcci�n
Consultores
Contadores P�blicos
Corredores de Seguros
Cristaler�as
Cueros
Decoraciones
Detectives Privados
  #13 (permalink)  
Antiguo 10/01/2008, 15:11
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Re: Mostrar primera letra en listado

El problema estaba en la comparación, la función strcasecmp devuelve 0 si son iguales, -1 si es mayor el primer elemento y 1 si es mayor el segundo, por eso no estaba bien la comprobación que yo hacía.

Código PHP:

<?php 
include ("connect.php"); 
 
$sql="SELECT DISTINCT categoria FROM categorias ORDER BY categoria"
$id_result=mysql_query($sql); 
 
$letra_anterior ""
while(
$row mysql_fetch_array($id_result)) {  
 
    
$letra_actual substr($row['categoria'], 01); // Metemos en una variable la primera letra de la palabra. 
    
if ((strcasecmp($letra_anterior,$letra_actual) <> 0) || ($letra_anterior=="")) { // comparamos ambas letras 
        
$letra_anterior $letra_actual
        echo 
$letra_actual.'<br/>'
    } 
    echo 
$row['categoria'].'<br/>'
 
 } 
?>
  #14 (permalink)  
Antiguo 10/01/2008, 15:16
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 5 meses
Puntos: 0
Re: Mostrar primera letra en listado

Perfecto amigo, ahora si:

A
Abogados
Academias e Institutos
Acciones y Valores
Aceros
Administradoras
Adornos
Agencias de Aduana
Agencias de Empleo
Agencias de Modelos
Agencias de Publicidad
Agencias de Viajes
Agropecuaria
Aire Acondicionado
Alarmas
Alimentos y Comestibles
Almacenes por Departamentos
Alquiler de Pel�culas
Alquiler de Veh�culos
Ambulancias
Animales
Arquitectos
Artes Gr�ficas
Artesanos
Art�culos Deportivos
Art�culos M�dicos
Art�stas
Aseo y Limpieza
Asesores
Asociaciones
Auditores
Autom�viles
Avisos para Exteriores
B
Bancos
Banderas
Banqueteros
Belleza y Est�tica
Bibliotecas
Bicicletas
Bingos y Casinos
Bolsas y Empaques
C
Caf� Internet
Cajas y Envases
Canales de Televisi�n
Canchas Deportivas
Carga A�rea
Carga Terrestre
Carpinteros y Ebanistas
Casas de Cambio

Lo que me queda es adaptarlo para mostrar en 3 columnas (en eso estoy trabajando ahora) y algo que creo tiene que ver con COUNT que es para mostrar al lado de cada categoria los registros que tenga, algo asi:

Canchas Deportivas (5)
Carga Aérea (12)

Te agradezco mucho tu ayuda, estoy a la orden por si necesitas algo en lo que te pueda colaborar...

hasta luego
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:30.