• User

    Confronto array

    Salve a tutti,
    non riesco ad eseguire il seguente passaggio:
    ho un array ricavato da un db tramite while ($array_classifica=mysql_fetch_array($dati_classifica)) {codice} che mi restituisce una serie di valori numerici. Io devo confrontare questi dati con una sequenza ordinata di numeri che va da 1 a 286 elencando i numeri della lista che non sono presenti nell'array (in paratica se l'array contiene 3,4,7 la funzione dovrà stampare solo 1,2,5,6..ecc).

    Come posso fare?
    Grazie infinite a tutti...


  • User Attivo

    Prova in questo modo:

    [php]
    while($array_classifica=mysql_fetch_array($dati_classif ica))
    {
    $found = false;

    for($i = 0; $i < count($lista_ordinata); $i++)
    {
    if($array_classifica["valore"] == $lista_ordinata*)
    $found = true;
    }

    if(!($found))
    echo $array_classifica["valore"];
    }
    [/php]

    Ciao!


  • User

    Ciao,
    ti ringrazio per la celere risposta...purtroppo anche cos' non sembra funzionare. Non mi restituisce alcun valore e poi l'echo finale deve essere di $i e non dell'array originale (i numeri devono essere in pratica quelli mancanti nella lista ordinata).


  • User Attivo

    Ciao,
    non mi è ben chiara la struttura del primo "array", ma se ad ogni ciclo while $array_classifi ca è un array di dati numerici e ad ogni ciclo devi stampare quelli non presenti nella lista, allora puoi fare così:

    [PHP]
    while($array_classifica=mysql_fetch_array($dati_classif ica))
    {
    foreach ($lista_ordinata as $value) if (!in_array($value,$array_classifica)) echo $value." ";
    echo "<br />";

    }
    [/PHP]

    Alessandro


  • User

    Grazie Alessandro,
    tecnicamente lo script che mi hai indicato è corretto, ma in questo caso mi vengono stampata n (il count del secondo array) volte la lista ordinata senza il valore corrispondente del primo array.

    Per capire meglio:

    • array_classifica (3,4,7,8)
    • array_listaordinata (1,2,3,4,5,6,7)

    l'output finale dovrebbe essere solo
    1,2,5,6 (i valori della listaordinata-valori della classifica)

    Nel tuo caso l'output invece è:
    1,2,4,5,6,7,1,2,3,5,6,7,1,2,3,4,6,7 ecc

    E' possibile secondo te ottenere un' unica lista?
    Grazie


  • User Attivo

    Molto grezzamente puoi fare così:
    [php]
    $array_classifica=array();
    while($temp=mysql_fetch_array($dati_classifica))
    {
    $array_classifica[]=$temp['valore'];
    }
    foreach ($lista_ordinata as $value) if (!in_array($value,$array_classifica)) echo $value." ";
    echo "<br />";
    [/php]


  • User

    Grazie infinite!!!
    E' perfetto così...