Cómo crear un programa PHP que muestre los enteros en orden por las veces que se repiten en la matriz

<? php
$ array_to_sort = [1,2,3,4,5,2,1,3,5,7,3,2,1,6,8,7,5,2,3,4,2,5,6] ;

$ number_of_occurrence = array_count_values ​​($ array_to_sort);
// de menor a mayor
asort ($ number_of_occurrence);

foreach ($ number_of_occurrence como $ key => $ value) {
echo $ clave ‘. ‘;
}
// de mayor a menor
arsort ($ número_de_currencia);

foreach ($ number_of_occurrence como $ key => $ value) {
echo $ clave ‘. ‘;
}

Aquí está la salida de lo anterior

2 5 3 1 6 4 7 8

8 6 7 4 1 5 3 2

Aquí también hay una explicación de lo que hace cada línea:

Línea 1: etiqueta de apertura de PHP

Línea 2: la variable $ array_to_sort contiene la lista de todos los enteros que se ordenarán

Línea 4: la ocurrencia de cada número entero se registra y almacena como matriz en la variable $ número_de_currencia, con el entero como clave y el número de ocurrencia como valor, usando la función función integrada matriz PHP_valores_valores.

Línea 6: el asort () ordena el contenido de la matriz de ocurrencia en función de los valores, que es el número de ocurrencia de menor a mayor.

Línea 8-10: itera a través de la matriz de ocurrencias ordenadas y genera las claves (enteros) en la línea 9.

Línea 12: el arsort () ordena el contenido de la matriz de ocurrencia en función de los valores, que es el número de ocurrencia de mayor a menor .

Línea 14-15: itera a través de la matriz de ocurrencias ordenadas y genera las claves (enteros) en la línea 15.

NOTA: Puede usar implode (”, array_keys ($ number_of_occurence)); como un reemplazo para los bloques foreach en la línea 15-16 y 10-12. funciona bien.

La lógica es primero obtener todo el valor único de la matriz en refArray y luego verificar el valor de cada matriz con refArray si el valor coincide con el contador de incrementos de la matriz correspondiente en una nueva matriz de contador [asociativa]. Una vez que hayas hecho eso, ordena el counterArray.

$ inputArray = array (6,6,7,7,7,2,1,1,1,1);

print_r ($ inputArray);

$ uniqueArray = array_unique ($ inputArray);

foreach ($ uniqueArray como $ u):

$ cuenta = ‘0’;

foreach ($ inputArray como $ i):

si ($ u == $ i)

{

$ cuenta = $ cuenta + 1;

$ countArray [$ u] = $ cuenta;

}

endforeach

endforeach

arsort ($ countArray);

$ finalArray = array_flip ($ countArray);

Aquí $ finalArray genera el valor de conteo repetido en orden ascendente mientras la tecla contiene el número único de la matriz de entrada

Salud

Felicitaciones a Marios Melidoniotis. Nunca antes había usado array_count_values ​​(). Solía ​​reducir para obtener los recuentos:

$ foo1 = [6,6,7,7,7,2,1,1,1,1];
$ foo2 = array_reduce ($ foo1, función ($ carry, $ item) {
$ carry [$ item] ++;
return $ carry;
}, []);
arsort ($ foo2);
$ respuesta = array_keys ($ foo2);

Pero siempre tenga esto en cuenta como una regla general de PHP: con todas las funciones de matriz que proporciona PHP, recorrer una matriz para transformarla en alguna otra representación es prácticamente un olor a código .

Soy demasiado vago para codificar esto, así que te daré una gran pista:

Tablas Hash.

Itere a través de la matriz y agregue cada entrada a una tabla hash donde la “Clave” es el valor y el “Valor” es el recuento.

Esto ejecuta O (1) por cada golpe y actualización. Luego imprima la clave según el orden de frecuencia. Con la impresión y la iteración, se ejecuta O (n).

No estoy seguro de cómo se implementan Hash Tables en PHP, pero generalmente ejecutan O (n) en el peor de los casos.

Diviértete y espero que eso ayude!

El siguiente código logra lo que quieres.

$ input = array (6, 6, 7, 7, 7, 2, 1, 1, 1, 1);
$ frecuencias = array_count_values ​​($ input);
arsort ($ frecuencias);
$ resultados = array_keys ($ frecuencias);
echo implode (”, $ resultados);

La salida es 1 7 6 2

Use estas funciones:

array_count_values ​​- Manual

PHP: usort – Manual