Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: Riordinare un array

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074

    Riordinare un array

    Ho un array, del tipo:
    codice:
    cane,
    gatto,
    topo,
    volpe,
    lupo,
    leone,
    per cui, quindi, l'ordine corrispondente sarà:
    codice:
    [0] => cane
    [1] => gatto
    [2] => topo
    [3] => volpe
    [4] => lupo
    [5] => leone
    Quello che mi serve è riordinare questo array, in base ad un nuovo ordine, tipo:
    codice:
    2,
    4,
    0,
    1,
    3,
    5,
    per cui risulterà:
    codice:
    topo,
    lupo,
    cane,
    gatto,
    volpe,
    leone,
    Il modo più veloce e pulito per farlo?
    metatad
    graphic & web design

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Quindi tu sai l'ordine che devono avere le chiavi.
    Questa sequenza di chiavi 2,4,0,1,3,5 dove ce l'hai? In un array o dove?

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074
    É un nuovo array
    metatad
    graphic & web design

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Ok, quindi hai 2 array
    Codice PHP:
    $array_da_ordinare = [ 'cane','gatto','topo','volpe','lupo','leone' ];

    $array_ordine = [2,4,0,1,3,5];

    // puoi fare così
    $temp = [];

    foreach( 
    $array_ordine as $key )
    {
        
    $temp[] = $array_da_ordinare[$key];
    }

    $array_da_ordinare $temp;

    unset(
    $temp); 
    Ultima modifica di Alhazred; 28-07-2017 a 20:38

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074
    Qualcosa non funziona...
    Questo è il codice che sto utilizzando:
    codice:
    $temp = [];    
        foreach( $neworder as $key ) {
            $temp[] = $imglist[$key];
        }
        $imgs = $temp;
        unset($temp);
    laddove $neworder è un array numerico (tipo: 1,3,2,4,5,6...) e $imglist un array di nomi (tipo cane,gatto, topo...).
    Se faccio un print_r di $imgs mi restituisce un array vuoto [ "array ( )" ]...
    metatad
    graphic & web design

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    1) verifica che l'array $neworder contenga realmente gli indici, prova a stamparlo con print_r()
    2) $imglist è un array con indici numerici? Non è che si tratta di un array associativo?

    $imgs = $temp;
    nel tuo caso non serve a niente, io $temp l'ho usato solo per poter riassociare gli elementi dell'array all'array iniziale, se li devi associare ad uno nuovo, un array d'appoggio non serve, usa direttamente $imgs al posto di $temp nel foreach() e togli le 2 righe che seguono il foreach().

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074
    Verificati:
    1) $neworder è un array di numeri, separati dalla virgola (ad es.: 1,3,7,4,5...)
    2)
    $imglist è un array di nomi, separati dalla virgola (ad es.: cane,gatto,topo...)
    Usando questo codice:
    codice:
    $list = [];
    foreach( $neworder as $key ) {
         $list[] = $imglist[$key];
    }

    e facendo poi print_r di
    $list, mi restituisce:
    codice:
    Array(
    )
    Ho provato a racchiudere i valori dell'array $imglist tra apici ('cane','gatto','topo'...), ma niente.
    Ho provato anche a generare una stringa, invece che un array, sostituendo $list = ""; a $list = [];, e $list .= $imglist[$key]; a $list[] = $imglist[$key];, ma il risultato è sempre nullo.
    metatad
    graphic & web design

  8. #8
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Quote Originariamente inviata da metatad Visualizza il messaggio
    Verificati:
    1) $neworder è un array di numeri, separati dalla virgola (ad es.: 1,3,7,4,5...)
    2) $imglist è un array di nomi, separati dalla virgola (ad es.: cane,gatto,topo...)
    Quindi ci sono buone probabilità che non siano array ma stringhe.
    Se fai print_r($neworder) e print_r($imglist) che ti dice?

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074
    Come dicevo:
    $neworder = 1,3,2,4,5,6...
    $imglist = cane,gatto,topo,leone...
    metatad
    graphic & web design

  10. #10
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Quindi come pensavo sono stringhe, non array altrimenti ti avrebbe stampato
    Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 )
    Array ( [0] => topo [1] => lupo [2] => cane [3] => gatto [4] => volpe [5] => leone )

    $imglist non ha indici, una stringa non ne ha e su $neworder non si può ciclare... strano anche che non ti venga mostrato alcun warning del tipo "foreach() expects parameter 1 to be array, string given", ma magari il livello di error_reporting impostato sul server è inferiore a quello necessario per mostrare questo tipo di warning.

    Devi prima trasformare le stringhe in array, avendo un separatore, la virgola, sei fortunato, si fa facilmente con explode(), da lì il codice torna uguale a quello che stai usando, ma poi dipende da come vuoi che sia fatta la variabile $list, vuoi che sia effettivamente un array o deve essere una stringa con elementi separati da virgola (che non è un array) come quelle che hai adesso?

    P.S.: conosci la differenza tra array e stringa?

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.