Visualizzazione risultati 1 fino 19 di 19

Discussione: massimo di un array

  1. #1
    Guest

    Predefinito massimo di un array

    buongiorno

    ho un problema con la ricerca del massimo di un array...
    in realtà a me interessano i primi 5 valori massimi di un array, ed i rispettivi indici

    proprio perchè mi servono anche gli indici ho scartato la soluzione con la funzione sort() che altrimenti mi avrebbe semplificato non poco la vita...

    allora questo è il codice che sto usando
    (e francamente non capisco perchè non funziona):

    Codice PHP:
    $j = 0;
    while (
    $j < 5) {
    $ids = array_keys(array_intersect($media, array(max($media))));

    echo
    "<br />l'indice vale ".$ids[0]. " la media vale ".$media[$ids];
    $media[$ids] = 0;


    $j++;
    }
    all'interno del ciclo while dopo che ho individuato il primo massimo lo azzero. cosi all'esecuzione successiva dovrei individuare il secondo massimo e cosi via...

    qualcuno sa perchè non funziona?
    ps... mi stampa sempre e solo il primo indice e non mi stampa mai la media
    Ultima modifica di stepone : 14-03-2011 alle ore 13.24.03

  2. #2
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Prova con
    array_slice($media, -5,5,true);

    Dovrebbe restituirti un array con gli ultimi 5 elementi dell'array $media
    Ultima modifica di binarysun : 14-03-2011 alle ore 13.40.39
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  3. #3
    Guest

    Predefinito

    si ma io non voglio gli ultimi 5 elementi...
    io vorrei i 5 piu grandi elementi.

  4. #4
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    mmm
    I 5 più grandi in base al valore?
    Puoi usare
    asort()
    E' come il sort() ma mantiene gli indici.
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  5. #5
    Guest

    Predefinito

    ti ringrazio...
    non conoscevo asort()

    però intanto ho risolto...
    se a qualcuno servisse mai... questo è il codice

    Codice PHP:
    $j = 0;
    while (
    $j < 5) {
    $ids = array_keys(array_intersect($media, array(max($media))));
    $a = (int)$ids[0];

    echo
    "<br />l'indice vale ".$a. " la media vale ".$media[$a];
    $media[$a] = 0;

    $j++;
    }

    grazie ancora per l'aiuto

  6. #6
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Citazione Originalmente inviato da stepone Visualizza messaggio
    ti ringrazio...
    non conoscevo asort()

    però intanto ho risolto...
    se a qualcuno servisse mai... questo è il codice

    Codice PHP:
    $j = 0;
    while (
    $j < 5) {
    $ids = array_keys(array_intersect($media, array(max($media))));
    $a = (int)$ids[0];

    echo
    "<br />l'indice vale ".$a. " la media vale ".$media[$a];
    $media[$a] = 0;

    $j++;
    }

    grazie ancora per l'aiuto
    Eviterei se fossi in te di usarlo dato che
    $ids = array_keys(array_intersect($media, array(max($media))));
    Viene eseguito 5 volte
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  7. #7
    Guest

    Predefinito

    hai ragione... ma quando l'ho scritto ancora non sapevo della possibilità di asort...

    adesso lo ottimizzo...

  8. #8
    Guest

    Predefinito

    però adesso un problema con asort()


    quando la uso :

    Codice PHP:
    $mediaOrd = asort($media);
    il nuovo array mi risulta di tutti e soli zeri...
    come mai?

  9. #9
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Prova con
    asort($media,SORT_NUMERIC)
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  10. #10
    Guest

    Predefinito

    avevo già provato anche in questo modo e non andava...

  11. #11
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Citazione Originalmente inviato da stepone Visualizza messaggio
    avevo già provato anche in questo modo e non andava...
    Cosa ti restituisce
    print_r($media);
    Prima del sort ?
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  12. #12
    Guest

    Predefinito

    avevo fatto anche io la prova e quello mi da esattamente quello che mi aspetto...
    cioè un array di tot elementi... molti nulli, ma è corretto che lo siano...
    ed altri invece con la media esatta in corrispondenza dell'indice giusto...

  13. #13
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Devi darmi almeno una parte dell'array stampato da print_r altrimenti non capisco.
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  14. #14
    Guest

    Predefinito

    il nuovo array mi risulta di tutti e soli zeri...
    come mai?
    scusa ma ricordavo male...

    allora risulta di soli zeri se stampo elemento per elemento facendo un while sull'array... invece se faccio print_r prima e dopo il sort questo è quello che ottengo:

    Array ( [1] => 10 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 [8] => 0 [9] => 0 [10] => 0 [11] => 0 [12] => 7.3 [13] => 0 [14] => 0 [15] => 0 [16] => 0 [17] => 0 [18] => 0 [19] => 0 [20] => 0 [21] => 0 [22] => 5 [23] => 0 [24] => 0 [25] => 0 [26] => 0 [27] => 0 [28] => 0 [29] => 0 [30] => 0 [31] => 0 [32] => 0 [33] => 0 [34] => 0 [35] => 0 [36] => 0 [37] => 0 [38] => 0 [39] => 0 [40] => 0 [41] => 0 [42] => 0 [43] => 0 [44] => 8 [45] => 0 [46] => 10 [47] => 0 [48] => 8 [49] => 0 [50] => 0 [51] => 8 [52] => 6.5 [53] => 0 [54] => 8 )


    1
    ho usato questo:

    Codice PHP:
    print_r($media);

    $mediaOrd = asort($media, SORT_NUMERIC);
    echo
    "<br /><br /><br />";
    print_r($mediaOrd);

  15. #15
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Nel secondo caso stampa 1
    Prova a fare SOLO il secondo print_r, commenta il primo print_r e l'istruzione echo e dimmi se da lo stesso risultato.
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  16. #16
    Guest

    Predefinito

    si...
    non è cambiato nulla...

  17. #17
    Guest

    Predefinito

    le funzioni per ordinare gli array hanno un return boleano TRUE/FALSE e non danno come return l'array riordinato.
    Esse modificano la variabile-array passatagli come parametro.
    La cosa che rende difficile il tuo caso è la necessità di preservare le key dell'array dato. Io ho pensato a:
    Codice PHP:
    $media = array(0,4,5,0,8,5,2,0,0,5,0,8,0,0,5,0,0,0,0,5,2,0,5,0,0,0,5,0,0,8);
    arsort($media, SORT_NUMERIC);
    $new_array = array();
    $i =0;
    foreach(
    $media as $k=>$v)
    {
    $new_array[$k] = $v;
    $i++;
    if(
    $i==5) break;
    }
    echo
    '<pre>';
    print_r($new_array);
    echo
    '</pre>';
    Ma è probabile che vi siano soluzioni migliori che ora nn mi sovvengono.
    Ultima modifica di miniscript : 15-03-2011 alle ore 14.08.58

  18. #18
    Guest

    Predefinito

    Citazione Originalmente inviato da stepone Visualizza messaggio
    si ma io non voglio gli ultimi 5 elementi...
    io vorrei i 5 piu grandi elementi.
    Allora ti conviene usare arsort.

    Copiaincolla e prova:

    Codice PHP:
    $media = array(1 => 10, 2 => 110, 3 => 50, 4 => 500, 5 => 2.5, 20 => 61);

    echo
    "<br /><br /><br />stampo l'array prima dell'ordinamento <br />";

    print_r($media);

    arsort($media);

    echo
    "<br /><br /><br />stampo l'array DOPO l'ordinamento <br />";

    print_r($media);
    Per ricavare i primi 5 elementi (che dopo l'ordinamento saranno quelli con valore più alto) penso tu non abbia problemi.
    Ultima modifica di webeginner : 15-03-2011 alle ore 15.17.30

  19. #19
    Guest

    Predefinito

    vi ringrazio a tutti per l'aiuto...

    alla fine ho risolto.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •