Foros del Web » Programando para Internet » PHP »

Array ordenador de otro array

Estas en el tema de Array ordenador de otro array en el foro de PHP en Foros del Web. Amigos: hice un programa que determina la frecuencia con la que aparece una palabra en un texto. Para esto tengo un array de palabras y ...
  #1 (permalink)  
Antiguo 26/03/2008, 14:33
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Pregunta Array ordenador de otro array

Amigos: hice un programa que determina la frecuencia con la que aparece una palabra en un texto. Para esto tengo un array de palabras y otro de pesos

El array de palabras no-repetidas es $palabras_no_rep

Logro determinar el peso de cada palabra pero luego no puedo ordenar la matriz $palabras_no_rep por pesos. Se entiende ?

Les dejo el codigo para ver que se puede hacer (gracias desde ya!)

Código PHP:
<?php
$str 
"La casa es blanca en casi todos lados. Mi casa es verde porque asi me gusta a mi. Hi!, como va la hipoteca de tu casa?";

// unifico
$str strtolower($str);

// Limipio de caracteres indeseables
$nostr = array(".",",",";","!","?");
For (
$i=0;$i<count($nostr);++$i){
  
$str str_replace ($nostr[$i]," ",$str);
}
////////////////////////////////

$palabras = array();
$palabras explode (" ",$str); // puede haber repetidas

/// elimino (casi todos) los elementos vacios del array
For ($i=0;$i<count($palabras);++$i){
  If ( 
strlen($palabras[$i])==0)
  
array_splice ($palabras,$i,1); // elimino elemento del array
}

$palabras_no_rep = array();
$pesos = array();

For (
$i=0;$i<count($palabras);++$i){
  If ( !
in_array($palabras[$i],$palabras_no_rep)){      
       
$palabras_no_rep[count($palabras_no_rep)]= $palabras[$i];
       
$pesos[$palabras[$i]]=1;
    }else{
       ++
$pesos[$palabras[$i]];
    }  
}

echo 
"$str <p/>";

For (
$i=0;$i<count($palabras_no_rep);++$i){
  If ( 
strlen($palabras_no_rep[$i])>0  )
  echo 
"La palabra: <b>".$palabras_no_rep[$i]."</b> tiene un peso de ".$pesos[$palabras_no_rep[$i]]." y una longitud de".strlen($palabras_no_rep[$i])."<br/>";  
}


?>
__________________
Salu2!

Última edición por Italico76; 26/03/2008 a las 14:42
  #2 (permalink)  
Antiguo 26/03/2008, 15:48
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Re: Array ordenador de otro array

Me autorespondo:

array_multisort($pesos,$palabras_no_rep);
__________________
Salu2!
  #3 (permalink)  
Antiguo 26/03/2008, 15:58
Avatar de _ssx  
Fecha de Ingreso: mayo-2003
Ubicación: mX
Mensajes: 683
Antigüedad: 20 años, 11 meses
Puntos: 60
Re: Array ordenador de otro array

Tambien podrias hacer.. algo asi.. por que supongo que te convendria tener mejor los datos juntos la palabra con sus pesos.. en un mismo array.. asi no andas manejando indices.. pero en fin :D


Código PHP:
$orden array_combine($palabras_no_rep,$pesos);
arsort($orden);
foreach(
$orden as $nombre => $valor){
 echo 
"La palabra: <b>".$nombre."</b> tiene un peso de ".$valor." y una longitud de".strlen($nombre)."<br/>";  

__________________
Escribe tu código de forma que refleje, y saque a relucir,lo mejor de tu carácter personal
www.oscararzola.com/blog
Principios de un programador
  #4 (permalink)  
Antiguo 26/03/2008, 16:55
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Re: Array ordenador de otro array

_ssx: me encanto tu respuesta

Lastima que tengo la pega de que el foreach nunca lo termino de interiorizar.
__________________
Salu2!
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 06:03.