- Home
- Categorie
- Coding e Sistemistica
- PHP
- Alternative a funzione max() su un array
-
Alternative a funzione max() su un array
Ho un array di questo tipo:
[PHP]$array = array(1,1,2,3,3,4,5,5,);[/PHP]
Usando "max()" riesco a tirare fuori i numeri "5 5".
Il problema è che vorrei tirare fuori anche gli altri, sempre a seconda dei casi:
1)adesso la stampa è 5 5;
2)vorrei fare in modo che diventi 4 5 5, ovvero lo script non dovrà prendere il valore più alto come fà con max, ma i 2 valori più alti;
3)infine simile al 2 avrei bisogno di ottenere: 3 3 4 5 5, quindi vorrei che prendesse tutti i valori riguardanti i 3 numeri più grandi.
In conclusione stò cercando un modo per non usare "max()", che mi restituisce solo il valore più alto in assoluto, e cambiarlo con un'altra funzione che mi restituisca i due o tre valori più alti in assoluto, poi lo stesso ovviamente applicerò con min();
Grazie per le future risposte!
-
Ciao,
non mi sembra esista una funzione che faccia questa cosa. Devi fartelo da solo utilizzando dei cicli.
-
Grazie per la risposta, in realtà avevo già provato con i cicli, ma prendendo i valori da un array avevo qualche difficoltà.
Se non esiste una funzione specifica proverò a creare un ciclo che funzioni.
-
<?php $array = array(1,1,2,3,3,4,5,5); $array_p=$array; $occorrenze=3; for ($i=1;$i<=$occorrenze;++$i) { $val=max($array_p); if ($val == $val2) --$i; echo 'Valore: '.$val.'<br>'; unset($array_p[array_search($val,$array_p)]); $val2=$val; } ?>
Potresti, ad esempio, fare così...
Crei un array copia del primo ($array_p)
Setti il numero di occorrenze che deve estrarre mediante il valore della variabile $occorrenze
Il ciclo for cicla occorrenze volte l'array copia, ogni volta ne rimuove il valore più alto ripetendo lo step se il valore che trova è uguale al precedente...La prima cosa che mi è venuta in mente... Ciao.