2012-01-31 41 views
11

tarih sırasına göre sipariş edin. İki diziİki diziyi birleştirin ve bu yeni diziyi

İlk olan

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 
      ) 

    ) 

ikinci

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

) 

Ve Yani

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 
       ) 

     ) 

benim nihai sonuç için istiyorum var .... ben birleştirmek gerekiyor ilk dizim ikincisiyle ve bu yeni diziyi tarihe göre sipariş etmek istiyorum! ... Birisi bana bunu yapmak için bana ipucu vermede yardımcı olabilir mi? Teşekkürler !

+0

DB – dfsq

+3

@ dfsq'den bunu seçtiğinizde "JOIN" yapmalısınız. Veritabanının var olduğunu varsayıyorsunuz. – Crashspeeder

+0

Bunun gayet eminim. Ve eğer öyleyse OP yanlış bir yaklaşım seçti. – dfsq

cevap

16

array_merge ve usort arkadaşın.

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

Gerçekten usort php belgelerini (bunun cevabı linkleri) okumanızı öneririm, bunu anlamak çok daha kolay hale getirir. Özellikle görünüşte gizemli getiri ($ ad- $ db) ve usort ($ arr, 'cmp'); –

+0

Bu http://stackoverflow.com/questions/39243553/how-does-this-usort-cmp-function-actually-work ile ilgili bir soru sordum Yardımcı olabilir misiniz? –

+1

Sorunu çok geç görebilir miyim? Neyse ki zaten sorunuza iyi bir cevap var. –

2

Dizileri birleştirmek için array_merge() öğesini kullanın ve sıralamak için sort() öğesini sıralamak için kullanın, çok basit. Bir örnek ister misin?

Bu sizin için sıralanması gerekir:

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

Evet, takdir edeceksiniz – user1029834

+0

Bir dakika içinde size geri döneceğim –

+0

Tarihi bir tarih olarak kaydetmeniz gerekiyor mu, yoksa sadece bir zaman damgası kullanabilir misiniz? Ardından, zaman damgasını gerekirse bir tarihe dönüştürebilirsiniz. Sadece soruyorum çünkü sıralamak biraz daha kolay. –

1

array_merge senin diziler ve daha sonra bunu nasıl sıralayabilirsiniz bir örnek olarak aşağıdaki kodu kullanabilirsiniz.

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);