2012-01-31 28 views
11

. Ho due serieCombina due array e ordina questo nuovo array per data

First One

Array 
    (
     [0] => Array 
      (
       [date] => 2012-01-10 
       [result] => 65 
       [name] => Les océans 
      ) 

     [1] => Array 
      (
       [date] => 2012-01-11 
       [result] => 75 
       [name] => Les mers 
      ) 

     [2] => Array 
      (
       [date] => 2012-01-13 
       [result] => 66 
       [name] => Les continents 
       [type] => Scores 
      ) 

    ) 

Il secondo

Array 
(
    [0] => Array 
     (
      [date_end] => 2012-01-12 
      [result] => 60 
      [name] => Step#1 
      [type] => Summary 
     ) 

) 

E voglio questo per il mio risultato finale

Array 
     (
      [0] => Array 
       (
        [date] => 2012-01-10 
        [result] => 65 
        [name] => Les océans 
       ) 

      [1] => Array 
       (
        [date] => 2012-01-11 
        [result] => 75 
        [name] => Les mers 
       ) 

      [2] => Array 
      (
       [date_end] => 2012-01-12 
       [result] => 60 
       [name] => Step#1 
       [type] => Summary 
      ) 

      [3] => Array 
       (
        [date] => 2012-01-13 
        [result] => 66 
        [name] => Les continents 
        [type] => Scores 
       ) 

     ) 

Così .... ho bisogno di combinare il mio primo array con il secondo e voglio ordinare questo nuovo array per data! ... Qualcuno può aiutarmi suggerendomi di farlo? Grazie !

+0

È necessario effettuare 'JOIN' quando si seleziona questo da DB – dfsq

+3

@dfsq Si presume che vi sia un database. – Crashspeeder

+0

Sono abbastanza sicuro di sì. E se così OP ha scelto un approccio sbagliato. – dfsq

risposta

16

array_merge e usort è tuo amico.

function cmp($a, $b){ 
    $ad = strtotime($a['date']); 
    $bd = strtotime($b['date']); 
    return ($ad-$bd); 
} 
$arr = array_merge($array1, $array2); 
usort($arr, 'cmp'); 
+0

Come nota a margine, suggerisco di leggere la documentazione di php di usort (la risposta si collega ad essa), rende le cose molto più facili da capire. Soprattutto il ritorno apparentemente misterioso ($ ad- $ db) e usort ($ arr, 'cmp'); –

+0

Ho fatto una domanda relativa a questo http://stackoverflow.com/questions/39243553/how-does-this-usort-cmp-function-actually-work Potrebbe esserti d'aiuto? –

+1

Forse ho visto la tua domanda troppo tardi. Fortunatamente c'è già una buona risposta alla tua domanda. –

2

Utilizzare array_merge() per combinare gli array e quindi utilizzare sort per ordinare() per ordinarli, molto semplice. Ti piacerebbe un esempio?

Questo dovrebbe ordinare per voi:

function dateSort($a,$b){ 
    $dateA = strtotime($a['date']); 
    $dateB = strtotime($b['date']); 
    return ($dateA-$dateB); 
} 

$arrayOne = array(
    array(
     'date'  => '2012-01-10', 
     'result ' => 65, 
     'name'  => 'Les océans' 
    ), 
    array(
     'date'  => '2012-01-11', 
     'result ' => 75, 
     'name'  => 'Les mers' 
    ), 
    array(
     'date'  => '2012-01-13', 
     'result ' => 66, 
     'name'  => 'Les continents', 
     'type'  => 'Scores' 
    ) 
); 

$arrayTwo = array(
    array(
     'date'  => '2012-01-12', 
     'result ' => 60, 
     'name'  => 'Step#1', 
     'type'  => 'Summary' 
    ) 
); 

// Merge the arrays 
$combinedArray = array_merge($arrayOne,$arrayTwo); 

// Sort the array using the call back function 
usort($combinedArray, 'dateSort'); 
+0

Sì, per favore, sarà apprezzato – user1029834

+0

Ti risponderò tra un minuto –

+0

Hai bisogno di memorizzare la data come data, o puoi semplicemente usare un timestamp? È quindi possibile convertire il timestamp in una data, se necessario. Chiedo solo perché rende leggermente più facile ordinare. –

1

array_merge gli array e quindi utilizzare il seguente codice come un esempio di come è possibile ordinare esso.

function sortDate($val1, $val2) 
{ 
    if ($val1['date'] == $val2['date']) { 
     return 0; 
    } 

    return (strtotime($val1['date']) < strtotime($val2['date'])) ? -1 : 1; 
} 

$array = array(
    array('date' => '2012-01-10'), 
    array('date' => '2011-01-10'), 
    array('date' => '2012-01-01') 
); 

usort($array, "sortDate"); 
print_r($array);