1

私はたくさん検索しましたが、正確な類似の質問が見つかりません。PHP の組み込み関数は、私が探していることを行いません。注: array_merge_recursively(...) は近づいてきましたが、インデックスを保持していませんでした。

たとえば、PHPの配列(json視覚化)があります:

[
    ["1-6-13", 10],
    ["30-6-13", 13],
    ["20-9-13", 28]
]

と:

[
    ["18-2-13", 7],
    ["30-6-13", 9]
]

そして、日付に基づいて、これら2つをマージしたいと思います。ただし、すべての日付が他の日付と一致するわけではありません。配列 1 の値がインデックス 1 にあり、配列 2 の値がインデックス 2 に追加されることが重要です。存在しない値は、たとえば null でなければなりません。

したがって、望ましい結果は次のようになります。

[
    ["18-2-13", null, 7],
    ["1-6-13", 10, null],
    ["30-6-13", 13, 9],
    ["20-9-13", 28, null]
]

誰かが私を助けてくれることを願っています!

4

2 に答える 2

3

最初に、次のようにすべての日付のコレクションを取得できます。

$dates = array_merge(array_map('reset', $data1), array_map('reset', $data2));

このコレクションには重複が含まれていますが、特に気にする必要はありません (array_unique問題があれば削除できます)。

補足: PHP >= 5.5 を実行している場合はarray_column($arr, 0)array_map('reset', $arr).

次に、日付をキーとして使用して、配列の配列に射影します。

$result = array_fill_keys($dates, array(null, null, null));

そして、データを入力してください:

foreach($data1 as $pair) {
    list($date, $num) = $pair;
    $result[$date][0] = $date;
    $result[$date][1] = $num;
}

foreach($data2 as $pair) {
    list($date, $num) = $pair;
    $result[$date][0] = $date;
    $result[$date][2] = $num;
}

もちろん、上記はループを持つ任意の数の配列に対して簡単に一般化できます。

最後に、数値でインデックスを付けたい場合は$result、キーとして使用された日付を失います。

$result = array_values($result);

実際に見てください

于 2013-06-14T19:03:25.260 に答える