Foros del Web » Programando para Internet » PHP »

top 3 de un arreglo

Estas en el tema de top 3 de un arreglo en el foro de PHP en Foros del Web. estimados, necesito generar un orden con los maximos repetidos en un arreglo por ej $arraglo = array("juan","juan","pedro","silvia","silvia","jua n") que me devuelva algo en este orden ...
  #1 (permalink)  
Antiguo 29/06/2006, 11:03
Avatar de dieguicho  
Fecha de Ingreso: noviembre-2001
Ubicación: Buenos Aires
Mensajes: 1.190
Antigüedad: 16 años
Puntos: 1
top 3 de un arreglo

estimados, necesito generar un orden con los maximos repetidos en un arreglo
por ej
$arraglo = array("juan","juan","pedro","silvia","silvia","jua n")

que me devuelva algo en este orden

Juan
Silvia
Pedro

es posible?
muchas gracias!
__________________
On error no hago nada porque deje de fumar...
  #2 (permalink)  
Antiguo 29/06/2006, 11:19
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 11 años, 6 meses
Puntos: 2122
hmmm podrias probar esto:
Código PHP:
function top3_repetidos$array ) {
    
$contador = array();
    foreach( 
$array as $item ) {
        if( isset( 
$contador[$item] ) ) {
            
$contador[$item]++;
        } else {
            
$contador[$item] = 1;
        }    
    }
    
    
$top3 array_sliceasort$contadorSORT_NUMERIC ), 0);
    
    return 
array_keys$top3 );

  #3 (permalink)  
Antiguo 29/06/2006, 11:22
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 12 años, 9 meses
Puntos: 33
De acuerdo

Prueba con la funcion asort()

Saludillos.
  #4 (permalink)  
Antiguo 29/06/2006, 11:29
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
a ver si esto te sirve:

Código PHP:
$unicas = array();
foreach (
$arreglo as $nombre) {
 if (
array_key_exists($nombre$unicas)) {
  
$unicas[$nombre]++;
  }
 else {
  
$unicas[$nombre] = 1;
  }
 
asort($unicas);
 } 
Es decir, recorrés la matriz original y vas poniendo en $unicas la cantidad de veces que aparece cada elemento. Después ordenás $unicas con asort().

Y al final simplemente hacés un foreach y vas mostrando cada palabra.
Si pudieras saber de antemano (que no siempre es posible) las palabras, podrías declarar

$unicas = array('juan' => 1, 'jose' => 1, ....);

y luego podrías simplificar el foreach eliminando el if y haciendo que siempre sume 1.


Saludos.
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 11:18.