2012-01-31 14 views
11

. Mam dwa tablicaPołączyć dwie macierze i zamówić nową tablicę według daty

Pierwszy z nich

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 
      ) 

    ) 

Drugi

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

) 

I chcę to dla mojego ostatecznego wyniku

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 
       ) 

     ) 

tak .... Muszę połączyć moja pierwsza tablica z drugą i chcę zamówić tę nową tablicę według daty! ... Czy ktoś może mi pomóc w podpowiedziach, jak to zrobić? Dzięki !

+0

Musisz zrobić 'JOIN' Po wybraniu tej z DB – dfsq

+3

@dfsq Ty zakładając, że istnieje w bazie. – Crashspeeder

+0

Jestem prawie pewien, że tak. A jeśli tak, OP wybrał niewłaściwe podejście. – dfsq

Odpowiedz

16

array_merge i usort jest twoim przyjacielem.

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

jako notatkę poboczną Naprawdę sugeruję czytanie dokumentacji php usort (odpowiedź do niej jest linkowana), sprawia, że ​​rzeczy są dużo łatwiejsze do zrozumienia. Zwłaszcza pozornie tajemniczy zwrot ($ ad- $ db) i usort ($ arr, 'cmp'); –

+0

Zadałem pytanie związane z tym http://stackoverflow.com/questions/39243553/how-does-this-usort-cmp-function-actually-work Może możesz pomóc? –

+1

Być może zbyt późno zobaczyłem twoje pytanie. Na szczęście jest już dobra odpowiedź na twoje pytanie. –

2

Użyj array_merge(), aby połączyć tablice, a następnie użyj sort do sortowania(), aby je posortować, bardzo prosto. Chcesz przykład?

To powinno rozwiązać to dla ciebie:

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

Tak, proszę, będzie to docenione – user1029834

+0

Wrócę do Ciebie za chwilę –

+0

Czy chcesz zapisać datę jako datę, czy możesz po prostu użyć znacznika czasu? W razie potrzeby możesz przekonwertować sygnaturę czasową na datę. Pytam tylko dlatego, że nieco łatwiej jest sortować. –

1

array_merge Twoje tablice, a następnie użyj następującego kodu jako przykładu sposobu sortowania.

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); 
Powiązane problemy