• User Newbie

    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!


  • ModSenior

    Ciao,
    non mi sembra esista una funzione che faccia questa cosa. Devi fartelo da solo utilizzando dei cicli.


  • User Newbie

    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.


  • User Attivo
    
    <?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.