2012-01-31 8 views
11

私は2つの配列2つの配列を結合し、この新しい配列を日付で並べ替えます。

まず一つ

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 
      ) 

    ) 

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

) 

を持っていると私はこれをしたい私の最終的な結果のために

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 
       ) 

     ) 

だから....私は結合する必要があります私の最初の配列と2番目の配列は、この新しい配列を日付順に並べ替える必要があります...誰かが私にこのことを尋ねるのを助けることができますか?どうも !

+0

DBからこれを選択するときは、 'JOIN'を実行する必要があります。 – dfsq

+3

@dfsqデータベースがあるとします。 – Crashspeeder

+0

私はこれが本当に確信しています。そしてもしそうなら、OPは間違ったアプローチを選んだ。 – dfsq

答えて

16

array_mergeusortはあなたの友達です。

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

をサイドノートとして私は実際にusort PHPドキュメント(それへの答えのリンク)を読むことをお勧めします。特に一見不思議なリターン($ ad- $ db)とusort($ arr、 'cmp')。 –

+0

私はこれに関連する質問をしましたhttp://stackoverflow.com/questions/39243553/how-does-this-usort-cmp-function-actuallyworkwork お手伝いができますか? –

+1

あなたの質問が遅すぎるかもしれません。幸いにもあなたの質問にはすでに良い答えがあります。 –

2

array_merge()を使用して配列を結合し、sortを使用して並べ替え(ソート)して、非常に簡単に並べ替えます。あなたは一例が欲しいですか?

これはあなたのためにそれを並べ替える必要があります。

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

はい、ありがとうございます – user1029834

+0

分であなたに戻ってきます –

+0

日付を日付として保存する必要がありますか、単にタイムスタンプを使用できますか?必要に応じて、タイムスタンプを日付に変換することができます。ちょっとだけ分けやすくなるので頼むだけです。 –

1

array_mergeあなたの配列を次に並べ替える方法の例として、次のコードを使用します。

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); 
関連する問題