Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    estrarre dati da un array

    ciao
    ho un array del tipo:
    Array ( [109.3] => 22.2 [326.8] => 21.2 [551] => 21 [782.2] => 21.7 [1019.7] => 21.1 [9999.9] => 726.9 [1511.9] => 18.3 [2028.1] => 14.9 [2570.6] => 11.3 )
    e dovrei estrarre i valori relativi alla chiave maggione e minore al valore che ho

    esempio:
    se ho 570 come mio valore vorrei estrarre

    21 per 551
    21.7 per 782

    come posso fare?

    grazie e ciao
    www.meteowebcam.it
    La migliore raccolta di webcam meteo Italiane

    www.creazionigrafiche.com
    Grafica e siti web d'autore

  2. #2
    Ti conviene usare il comando ksort con cui l'array che hai viene ordinato per ordine crescente sulle chiavi.

    A questo punto ti fai uno scriptino che può essere simile a questo.

    Supponiamo ke il tuo array si chiami prova mentre il tuo valore di cui trovare il precedente ed il successivo $tuo_valore.

    ksort($prova);

    $prec = 0;
    $succ = 0;


    //Prenediamo il valore immediatamente prima

    foreach($prova as $ind->$elem)
    {
    if ($ind < $tuo_valore) $prec = $elem;
    else break; //Siccome l'array è ordinato sulla chiave vuol dire che da questo punto in poi tutte le chiavi saranno maggiori di $tuo_valore
    }


    //Prenediamo il valore immediatamente dopo

    foreach($prova as $ind->$elem)
    {
    if ($ind > $tuo_valore)
    {
    //Non appena incontriamo il primo valore + grande di $tuo_valore quello è il successivo e, quindi, terminiamo il ciclo

    $succ = $elem;
    break;
    }
    }

    In base ai valori di $prec e $succ puoi avere le seguenti 4 combinazioni:

    $prec = 0 && $succ != 0 c'è solo il successivo;
    $prec != 0 && $succ = 0 c'è solo il precedente;
    $prec != 0 && $succ != 0 ci sono entrambi;
    $prec = 0 && $succ = 0 può accadere solo se l'array è vuoto.

    Può nascere un problema se per caso come elemento dell'array prec o succ vi sia proprio il valore ZERO. Se questa possibilità esiste allora dobbiamo fare una piccola modifica:


    ksort($prova);

    $find_prec = false;
    $find_succ = false;


    //Prenediamo il valore immediatamente prima

    foreach($prova as $ind->$elem)
    {
    if ($ind < $tuo_valore)
    {
    $find_prec = true;
    $prec = $elem;
    }
    else break; //Siccome l'array è ordinato sulla chiave vuol dire che da questo punto in poi tutte le chiavi saranno maggiori di $tuo_valore
    }


    //Prenediamo il valore immediatamente dopo

    foreach($prova as $ind->$elem)
    {
    if ($ind > $tuo_valore)
    {
    //Non appena incontriamo il primo valore + grande di $tuo_valore quello è il successivo e, quindi, terminiamo il ciclo

    $find_succ = true;
    $succ = $elem;
    break;
    }
    }


    Quindi le 4 combinazioni saranno:

    $find_prec = false && $find_succ = true c'è solo il successivo;
    $find_prec = true && $find_succ = false c'è solo il precedente;
    $prec = true && $succ = true ci sono entrambi;
    $prec = fasle && $succ = false può accadere solo se l'array è vuoto.

  3. #3
    Grazie sei stao molto gentile e molto chiaro

    Ciao

    Pietro
    www.meteowebcam.it
    La migliore raccolta di webcam meteo Italiane

    www.creazionigrafiche.com
    Grafica e siti web d'autore

  4. #4
    Di niente.

    Mi sono accorto di un errore:

    foreach($prova as $ind->$elem)

    al posto di -> va messo =>

  5. #5
    ciao
    Mi si e' posto un altro problema
    se il precedente non ce vorrei tirare fuori i due successivi

    nell esempio:

    [109.3] => 22.2 [326.8] => 21.2

    coma posso fare?

    grazie e ciao
    www.meteowebcam.it
    La migliore raccolta di webcam meteo Italiane

    www.creazionigrafiche.com
    Grafica e siti web d'autore

  6. #6
    ksort($prova);

    $find_prec = false;
    $find_succ = false;
    $succ = array();


    //Prenediamo il valore immediatamente prima

    foreach($prova as $ind=>$elem)
    {
    if ($ind < $tuo_valore)
    {
    $find_prec = true;
    $prec = $elem;
    }
    else break; //Siccome l'array è ordinato sulla chiave vuol dire che da questo punto in poi
    //tutte le chiavi saranno maggiori di $tuo_valore
    }


    if ($find_prec === true)
    {
    //Prenediamo il valore immediatamente dopo

    foreach($prova as $ind=>$elem)
    {
    if ($ind > $tuo_valore)
    {
    //Non appena incontriamo il primo valore + grande di $tuo_valore quello è il successivo
    //e, quindi, terminiamo il ciclo

    $find_succ = true;
    $succ[0] = $elem;
    break;
    }
    }
    }
    else
    {
    //Prenediamo due valori immediatamente dopo

    foreach($prova as $ind=>$elem)
    {
    if ($ind > $tuo_valore)
    {
    $find_succ = true;

    //Vediamo se è il primo valore + grande di $tuo_valore ke incontriamo o il secondo

    if (count($succ) == 0) $succ[0] = $elem;
    else
    {
    $succ[1] = $elem;
    break;
    }
    }
    }
    }


    //A questo punto hai 5 combinazioni:

    - Se $succ contiene 2 elementi allora hai preso i 2 successivi
    - $succ contiene 1 elemento e $find_prec = false allora c'è solo 1 successivo
    - $succ contiene 1 elemento e $find_prec = true allora c'è 1 successivo ed 1 precedente
    - $succ contiene 0 elementi e $find_prec = false allora non c'è successivo e precedente
    - $succ contiene 0 elementi e $find_prec = true allora c'è solo il precedente

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.