Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Ordinare due array

  1. #1
    Utente di HTML.it L'avatar di Sam981
    Registrato dal
    Mar 2002
    Messaggi
    116

    Ordinare due array

    Ciao ragà!
    Ho il seguente problema:

    Tramite un array di 25 valori contenente ID prodotto
    ne genero un altro contenente la tipologia, ovviamente anch'esso di 25 valori.

    Vorrei ordinare alfabeticamente il secondo array, ma ho la necessità a quel punto di riordinare automaticamente anche il primo... per non perdere la relazione...HELP!

  2. #2
    Utente di HTML.it L'avatar di Sam981
    Registrato dal
    Mar 2002
    Messaggi
    116
    UP...

  3. #3
    Uhm... qualche tempo fa avevo un problema simile, vediamo se ricordo bene la soluzione che ho implementato.

    *******************
    Soluzione 1:
    Puoi utilizzare un array associativo (cioè una tabella hash, anzichè 2 array separati) fatto in questo modo:

    $mioarray["scarpe"] = "2133";
    $mioarray["pantaloni"] = "5222";
    $mioarray["giacche"] = "7844";
    $mioarray["calzettoni"] = "9436";
    ...
    e così via.

    e poi ordini alfabeticamente tramite la chiave (che è la tipologia del prodotto) -->> vedi guida php riguardo alle funzioni che ordinano gli array associativi (oppure la funzione che ho copia-incollato qui sotto).

    *******************
    Soluzione 2 (meno efficiente e meno elegante della precedente):

    Su http://it.php.net/manual/it/function.strcmp.php
    ho trovato il seguente codice di funzione che ordina alfabeticamente due stringhe:
    codice:
    // Returns 1 if $str1 comes before $str2 alphabetically
    // Returns -1 if $str1 comes after $str2 alphabetically
    // Returns 0 if $str1 and $str2 are the same
    function orderAlpha ( $str1, $str2 ) {
       $limit = null;
    
       if ( strlen( $str1 ) > strlen( $str2 ) ) {
         $limit  = strlen( $str2 );
       } else {
         $limit = strlen( $str1 );
       }
    
       for ( $i = 0;$i < $limit;$i++ ) {
         if ( substr( $str1, $i, 1 ) > substr( $str2, $i, 1 ) ) {
             return 1;
         } else if ( substr( $str1, $i, 1 ) < substr( $str2, $i, 1 ) ) {
             return -1;
         }
       }
    
       if ( strlen( $str1 ) > strlen( $str2 ) ) {
         return 1;
       } else if ( strlen( $str1 ) < strlen( $str2 ) ) {
         return -1;
       }
    
       return 0;
    }
    
    // Case insensitive version of orderAlpha
    function orderiAlpha ( $str1, $str2 ) {
       return orderAlpha( strtolower( $str1 ), strtolower( $str2 ) );
    }
    Supponiamo adesso che i tuoi due array si chiamino $tip_array e $idp_array .
    Per ordinarli puoi procedere così:
    codice:
    for ($i=0; $i<26; $i++) 
     for ($j=$i+1; $j<26; $j++) 
       if (orderAlpha ( $tip_array[$i], $tip_array[$j])<0) {
          // scambiamo le tipologie
          $swap_tip=$tip_array[$i]; 
          $tip_array[$i]=$tip_array[$j]; 
          $tip_array[$j]=$swap_tip;
          // scambiamo anche gli id prodotto
          $swap_idp=$idp_array[$i]; 
          $idp_array[$i]=$idp_array[$j]; 
          $idp_array[$j]=$swap_idp;
        } // chiude l'if
    Make Pazziata-tàààà NOT war!

  4. #4
    Utente di HTML.it L'avatar di Sam981
    Registrato dal
    Mar 2002
    Messaggi
    116
    GRAZIE per la dritta!!!
    Ma ho dei sei problemi a memorizzare le informazioni all'interno dell'array associativo che non ho mai utilizzato...!

    Faccio tutte le operazioni all'interno di un ciclo for($k=0;$k<25;$k++)

    $id[$k]//è l'aray che contiene gli id

    $tipologia[$k]//è l'array che contiene le tipologie

    Come faccio all'interno del ciclo a memorizzare i dati all'interno dell'array e poi stamparlo per visualizzare se effettivamente tutto funziona come dovrebbe!?

    GRAZIE!

  5. #5
    Utente di HTML.it L'avatar di Sam981
    Registrato dal
    Mar 2002
    Messaggi
    116
    $id[$k]//è l'array che contiene gli id

    $tipologia[$k]//è l'array che contiene le tipologie

    Come faccio all'interno del ciclo a memorizzare i dati all'interno dell'array e poi stamparlo per visualizzare se effettivamente tutto funziona come dovrebbe!?

    Insomma... vorrei qualcosa del tipo
    $array_da_ordinare[$id[$k]=>$tipologia[$k]]

  6. #6
    Come supponevo sin dall'inizio il php ci viene incontro per risolvere questi problemi con un afunzione apposita.

    Dunque ignora quello che ho scritto sopra e guarda qui:
    http://it.php.net/manual/it/function...-multisort.php

    troverai che
    la funzione array_multisort() può essere usata per ordinare parecchi array allo stesso tempo, oppure un array multidimensionale, rispetto a una o più dimensioni.
    Esempio 1:
    codice:
    <?php
    $ar1 = array("10", 100, 100, "a");
    $ar2 = array(1, 3, "2", 1);
    array_multisort($ar1, $ar2);
    ?>
    In questo esempio, dopo l'ordinamento, il primo array conterrà "10", "a", 100, 100. Il secondo array conterrà 1, 1, "2", 3. Gli elementi nel secondo array che corrispondono agli elementi identici nel primo array (100 e 100) vengono pure ordinati.

    Leggi bene la pagina nel link che ti ho indicato.
    Ciao
    Make Pazziata-tàààà NOT war!

  7. #7
    Utente di HTML.it L'avatar di Sam981
    Registrato dal
    Mar 2002
    Messaggi
    116
    Grazie per l'aiuto Zingaro2002
    Ho dato un'occhiata alla funzione di cui mi hai parlato, ma ciò che faceva al caso mio era altro.
    Mi hai comunque illuminato a proposito degli arrya associativi! grazie!

    ***

    Se a qualcuno potesse interessare ho risolto così:

    [PHP]
    //PREMETTO CHE $acquistati è UN ARRAY CHE CONTIENE L'ID DEI PRODOTTI CHE STO ACQUISTANDO (CHE SONO SEMPRE 25)

    //MEMORIZZO LA TIPOLOGIA DI CIASCUN PRODOTTO PRESENTE NELL'ARRAY $acquistati ALL'INTERNO DELL'ARRAY $tipologia
    for ($k=0; $k<25;$k++)
    {$query_1 =
    "SELECT tipologia FROM prodotti WHERE id='$acquistati[$k]'";
    $res_1 = mysql_query ($query_1, $connessione)
    or die ("Errore di inserimento".mysql_error());
    while ($row=mysql_fetch_array($res_ordinamento))
    {$ruolo[$k]=$row["ruolo"];
    }
    //CREO INFINE UN ULTIMO ARRAY ASSOCIATIVO CON LE COPPIE $id_prodotto=>$tipologia
    $array_ordinato[$acquistati[$k]]=$tipologia[$k];}
    //ORDINO L'ARRAY OTTENUTO PER RUOLO
    asort($array_ordinato);

    //MEMORIZZO I DATI ORDINATI ALL'INTERNO DELLA TABELLA LISTA
    while (list($key) = each($array_ordinato))
    {$numero_valori++;
    $query_2 = "UPDATE lista SET prodotto_$numero_valori='$key'
    where id=$id_utente";
    $res_2 = mysql_query ($query_2, $connessione)
    or die ("Errore di inserimento".mysql_error());
    }
    [PHP]

    ***

    Poteva servire? Forse.
    NE avete capito qualcosa? Non credo! Mi sono spiegato male sin dall'inizio lo so. Cmq GRAZIE!

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    170
    Universita statale di Milano? 3 anno informatica? :P
    Ariok

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 © 2024 vBulletin Solutions, Inc. All rights reserved.