Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Ordinare array

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2004
    Messaggi
    1,627

    Ordinare array

    Salve a tutti!
    ho un array che vorrei ordinare per data.

    così inserisco i dati nell'array:

    $array[$data] = $a; (dove $data è la data e $a è il numero totale degl'oggetti trovati per quella data)

    e così li stampo a video :

    foreach($array as $key=>$val){
    echo $key ." - ".$val.'
    ';
    }

    ora vorrei ordinare l'array per $data ho provato ad utilizzare 'arsort' ma mi raggruppa le date

    Es se ho 5 date uguali me ne visualizza sono una

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Se ho ben capito a te serve ksort().
    Però le date devono essere nel formato aaaa/mm/gg altrimenti l'ordinamento alfanumerico non funziona e devi farti una tua funzione di ordinamento ad hoc.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2004
    Messaggi
    1,627
    perfetto...mi sono riformattato la data e ora le ordina correttamente, però mi rimane sempre il problema che mi visualizza solo una data per tipo.
    Es.
    2013-06-26 115 prodtti
    2013-06-26 100 prodtti
    2013-06-26 95 prodtti

    mi visualizza solo la prima ' 2013-06-26 115 prodtti ' e non le altre

    inoltre volevo sapre se è possible ed eventualmente come fare, poter aggiungere altri due valori al mio array.
    Es.

    ora visualizzo data e numero prodotti, vorrei inserire nel mio array anche due contatori, che utilizzo per definire quanti 'prodotti A' ci sono e quanti 'prodotti B'. A e B li definisco a mano a mano che conto il numero dei prodotti

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Scusa, ma come fai ad avere un array con più chiavi uguali?
    Nel momento in cui lo costruisci se c'è 2 o più volte la stessa chiave, l'entry verrà sovrascritta, non aggiunta.

    Codice PHP:
    $array = array ('chiave1' => 90,
                    
    'chiave2' => 34,
                    
    'chiave3' => 12,
                    
    'chiave2' => 88,
                    
    'chiave2' => 67);

    print_r($array);
    //ti stamperà solo una volta 'chiave2', quella col valore 67 

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2004
    Messaggi
    1,627
    ok, hai ragione te, allora mi conviene cambiare le chiavi potrei mettere come chiave l'indice del contatore del ciclo che è progressiovo, quindi mi troverei:

    'id_1' => data => 90 contA=> contB,
    'id_2' => data => 45 contA=> contB,
    'id_3' => data => 60 contA=> contB,

    giusto? e come predispongo il mio array?

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Puoi organizzare l'array così

    $array['id_1'] = array('data' => 'la_data', 'prodotti' => 'numero_di_prodotti');
    $array['id_2'] = array('data' => 'la_data', 'prodotti' => 'numero_di_prodotti');
    ...

    Ordina $array con ksort e dovresti essere a posto.

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2004
    Messaggi
    1,627
    e come posso stamapre l'array ?

  8. #8
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Codice PHP:
    foreach ($array as $entry)
    {
        echo 
    $entry['data'].' - '.$entry['prodotti'].'
    '
    ;


  9. #9
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Sarà ordinato anche per data, suppongo che le date inserite non siano a caso, ma progressive anche loro, quindi ad id più bassi corrispondono date più vecchie.
    E poi l'ha detto lui che potrebbe lavorare sugli id per ordinare, io mi sono attenuto a quanto detto.

  10. #10
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Originariamente inviato da raven74
    nell'esempio che ha fatto le date non sono progressive come gli id.

    Forse è meglio capire da dove vengono questi dati. magari vengono da una DB e allora basta ordinare opportunamente la query.
    Non saprei, ma potrebbe anche aver scritto numeri a caso come ho fatto io, come date 90, 45 e 60 non hanno un gran senso.

    Comunque, se non andasse bene, james81 si farà risentire con maggiori informazioni, senza sue indicazioni è inutile fare congetture.

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.