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

    ordinare un array multidimensionale

    ciao a tutti,
    ho un array multidimensionale e dovrei riuscire a ordinare gli elementi secondo la key "data".

    codice:
    Array
    (
    	[0] => Array
    		(
    			[tit] => Titolo
    			[link] => link
    			[data] => 30 gennaio 2013
    		)
    
    	[1] => Array
    		(
    			[tit] => Titolo
    			[link] => link
    			[data] => 6 gennaio 2013
    		)
    
    	[2] => Array
    		(
    			[tit] => Titolo
    			[link] => link
    			[data] => 14 gennaio 2013
    		)
    
    	[3] => Array
    		(
    			[tit] => Titolo
    			[link] => link
    			[data] => 23 gennaio 2013
    		)
    )
    sapete come fare?

    grazie mille!

  2. #2
    QUESTO non andava bene?

    ...per la serie non ci capisco nulla delle risposte che mi danno ma le copio uguale!
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Ciao Satifal,

    forse non ho capito... a me sembrano diversi i due casi.
    In quello che mi indichi ci sono dei campi uguali in cui c'è un raggruppamento... il processo che ne viene fuori è tanta roba.

    In questo, invece, pensavo che ci fosse una fra le tot funzioni che ci sono per ordinare gli array in cui bastasse lanciare la funzione e dire per esempio la key con la quale ordinare gli array. Ho cercato fra le funzioni, ma penso di non avere trovato quella giusta.

    Se invece non ho capito una fava, mi cospargo il capo di cenere e faccio ammenda.

  4. #4
    E' ovvio che non puoi prendere il codice dell'altro 3d esattamente così com'è, ma il principio e la logica sono assolutamente le stesse. Se hai compreso il funzionamento dell'altro caso ci metti un attimo ad adattarlo a questo.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    Verifica se il codice presente nell'altro 3d non è praticamente identico:

    Codice PHP:
    <?php
    function dateOrder($a$b) {
      return 
    strcmp($a["data"], $b["data"]);
    }

    $arr = array(
        
    => array('tit' => 'Titolo''link' => 'link''data' => '30 gennaio 2013'),
        
    => array('tit' => 'Titolo''link' => 'link''data' => '6 gennaio 2013'),
        
    => array('tit' => 'Titolo''link' => 'link''data' => '14 gennaio 2013'),
        
    => array('tit' => 'Titolo''link' => 'link''data' => '23 gennaio 2013')
    );

    usort($arr"dateOrder");

    foreach (
    $arr as $key => $value) {
        echo 
    $value['tit']." ".$value['link']." ".$value['data'] ."
    "
    ;
    }
    ?>
    L'unico problema che richiede una modifica al codice è il metodo di confronto tra due le due date. Nel formato da te utilizzato, effettuando un semplice confronto tra strighe, purtroppo la data "6 gennaio 2013" viene dopo "30 gennaio 2013" dato che il primo carattere 6 viene dopo il 3 della seconda data.

    Per ovviare a ciò ti consiglio di trasformare ad esempio prima del confronto le date in millisecondi.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  6. #6
    l'ho fatto, e siccome avevo una consegna urgente mi sono arrangiato così.

    La data, che ha questo formato (2013-01-28 22:30) la recupero da dentro a un loop di wordpress.

    Codice PHP:

    //ecco le mie funzioni

    function clean_the_date $date ) {
      
    $delete = array("-"" "":" );
      return 
    substrstr_replace($delete""$date), 0);
    }

    function 
    dataOrder($a$b) { 
      if (
    $a["data"] == $b["data"]) {
        return 
    0;
      }
      return (
    $a["data"] < $b["data"]) ? -1;
    }

    clean_the_date$post->post_date ); // valore che poi inserisco in un array.
    // array che poi sfoglio con foreach, il cui $val è l'array su cui devo fare l'ordinamento

    usort($val"dataOrder");

    $val array_reverse$val );

    // poi la data la stampo così:
    echo substr$rec['data'], 6) . ' / ' substr$rec['data'], 4) . ' / ' substr$rec['data'], 0); 
    Non è poesia ma funziona... invece di fare tutto il casino che ho fatto per la formattazione della data sarebbe carino che dal formato (2013-01-28 22:30) potessi trovare il timestamp.

    Grazie per ogni tipo di suggerimento!

  7. #7
    Se il formato è quello da te indicato (yyyy-mm-dd hh:mm) non ti serve a nulla il timestamp. Basta il codice che ti ho postato per ottenere l'ordinamento!
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  8. #8
    e cavoli no mi funzionava....
    ci riprovo, forse l'errore era un altro...

    grazie

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.