Foros del Web » Programando para Internet » PHP »

Ordenando arays

Estas en el tema de Ordenando arays en el foro de PHP en Foros del Web. Hola, les comento que no tengo ni idea de como hacer esto. Tengo en una BD los siguientes campos: palabra, definicion, soundex, donde soundex es ...
  #1 (permalink)  
Antiguo 17/12/2008, 07:58
 
Fecha de Ingreso: diciembre-2008
Mensajes: 8
Antigüedad: 15 años, 4 meses
Puntos: 0
Ordenando arays

Hola, les comento que no tengo ni idea de como hacer esto.

Tengo en una BD los siguientes campos: palabra, definicion, soundex, donde soundex es el cod soundex de palabra.

Cuando alguien manda a buscar una palabra que no está en la BD les muestro las que tengan el mismo soundex que la que busca.

El problema es que quiero mostrarle el listado ordenado por las que más se parezcan. Esto es lo que hago:

$instruccion = "select palabra,significado,soundex from rae WHERE `soundex` = '".soundex($palabra)."'";
$consulta = mysql_query ($instruccion, $conexion) or die ("Fallo en la consulta");

$nfilas = mysql_num_rows ($consulta);
if($nfilas > 20){
$nfilas = 20;
}
//****
for ($i=0; $i<$nfilas; $i++){
$resultado = mysql_fetch_array ($consulta);
echo ("<b>".$resultado['palabra']."</b><br />");
echo ($resultado['significado']."<br />");
}

Si donde esta //**** hago un asort me produce un resultado inesperado

también se me ocurrió antes de mostrar el resultado hacer esto:
for ($i=0; $i<$nfilas; $i++){
$resultado = mysql_fetch_array ($consulta);
$resultado['parecido'] = similar_text($palabra,$resultado['palabra']);
}
mi idea es agregar otro elemento al array que contenga la semejanza, pero igual me funciona mal.

¿Alguna idea de como hago esto?

Última edición por darkroll; 17/12/2008 a las 08:07 Razón: me falto la subscripcion
  #2 (permalink)  
Antiguo 17/12/2008, 08:10
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Respuesta: Ordenando arays

Hola darkroll...

Creo que todo eso lo mejoras haciéndolo directamente con mysql:

Código mysql:
Ver original
  1. select palabra,significado,soundex from rae where soundex=palabra order by soundex;

No?

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #3 (permalink)  
Antiguo 17/12/2008, 08:15
 
Fecha de Ingreso: diciembre-2008
Mensajes: 8
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Ordenando arays

El problema es que yo solicito en la consulta los iguales: WHERE `soundex` = '".soundex($palabra).


Así que no tiene sentido ordenarlos por ese campo.
  #4 (permalink)  
Antiguo 17/12/2008, 08:18
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Respuesta: Ordenando arays

Solo cambias por el campo que necesites y ya...

Es indiferente ordenar por uno o por otro, lo que necesitas es que ordene... pásale el campo que necesites ordenar y ya...

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #5 (permalink)  
Antiguo 17/12/2008, 08:38
 
Fecha de Ingreso: diciembre-2008
Mensajes: 8
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Ordenando arays

Cita:
Iniciado por Carxl Ver Mensaje
Solo cambias por el campo que necesites y ya...

Es indiferente ordenar por uno o por otro, lo que necesitas es que ordene... pásale el campo que necesites ordenar y ya...

Saludos
Carxl. Estoy muy contento de recibir respuestas casi instantáneas, pero la verdad aún no llegamos a la solución, el problema es que no me he sabido explicar, te pido disculpas.

En la BD tengo el campo soundex que lo utilizo para saber las palabras similares a las que busco. Pero soundex no es muy eficiente con el español, asi que la necesito convinar con similar_text para obtener mejores resultados.

lo que quiero es obtener primero las palabras que tengan el mismo soundex que la que busco, usando el WHERE `soundex` = '".soundex($palabra)."'"

Luego determinar el similar_text de los resultados y ordenarlos por el mismo. Aclaro que en la BD no tengo un campo similar text.

por ejemplo: cuando hago la consulta para la palabra "pepasa" me devuelve un listado:
papagaya
papagayo
papaz
....
pupusa
puposo

estas son las que tienen el mismo soundex, sin envargo similar text me dice cuanto se parece una de la otra ej
pepasa y papagaya = 3
pepasa y pupusa = 4 (esta es más similar)

Al mostrar los resultados quisiera que pupusa se mostrara primero. No se si ya me hice entender del todo.
Pido disculpas nuevamente por ser tan escueto!
  #6 (permalink)  
Antiguo 17/12/2008, 09:23
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Respuesta: Ordenando arays

Hola de nuevo darkroll...

Nunca he utilizado "similar_text" pero te devuelve un valor numérico no? No te va tampoco con rsort?

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #7 (permalink)  
Antiguo 17/12/2008, 10:21
 
Fecha de Ingreso: diciembre-2008
Mensajes: 8
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Ordenando arays

Ya lo resolví!!!


for ($i=0; $i<$nfilas; $i++){
$resultado = mysql_fetch_array ($consulta);
$valores[$i]["similitud"] = similar_text($palabra,$resultado['palabra']);
$valores[$i]["palabra"] = $resultado['palabra'];
$valores[$i]["significado"] = $resultado['significado'];
$valores[$i]["tipopalabra"] = $resultado['tipopalabra'];
$valores[$i]["silabas"] = $resultado['silabas'];
}
array_multisort($valores,SORT_DESC);

después lo muestro
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 09:11.