6

私はこれで頭を悩ませてきました。

私は2つの配列を持っています:

配列 1 は CSV ファイルから取得します。

配列
(
    [0] => 配列
        (
            [uid] => cgajate
            [日付] => 20120918
        )

    [1] => 配列
        (
            [uid] => badrock5
            [日付] => 20120920
        )

    [2] => 配列
        (
            [uid] => ricoetc
            [日付] => 20120921
        )

    [3] => 配列
        (
            [uid] => ricoetc1
            [日付] => 20120923
        )

    [4] => 配列
        (
            [uid] => darbyfired
            [日付] => 20120922
        )

    [5] => 配列
        (
            [uid] => sagers.andrew
            [日付] => 20120922
        )

    [6] => 配列
        (
            [uid] => フランクフルト9
            [日付] => 20120923
        )

    [7] => 配列
        (
            [uid] => ビーチボーイズ
            [日付] => 20120923
        )

    [8] => 配列
        (
            [uid] => パンテラファン
            [日付] => 20120923
        )

    [9] => 配列
        (
            [uid] => kingsxrules
            [日付] => 20120923
        )

    [10] => 配列
        (
            [uid] => リチャード.ビット
            [日付] => 20120924
        )

    [11] =>配列
        (
            [uid] => クリストファー.ボス
            [日付] => 20120925
        )

    [12] =>配列
        (
            [uid] => eric.robinson2
            [日付] => 20120926
        )

)

配列 2 は、SQL データベースから取得します。

配列
(
    [0] => 配列
        (
            [uid] => cgajate
            [日付] => 20120919
        )

    [1] => 配列
        (
            [uid] => ricoetc
            [日付] => 20120921
        )

    [2] => 配列
        (
            [uid] => ricoetc1
            [日付] => 20120922
        )

    [3] => 配列
        (
            [uid] => フランクフルト9
            [日付] => 20120923
        )

    [4] => 配列
        (
            [uid] => ビーチボーイズ
            [日付] => 20120923
        )

    [5] => 配列
        (
            [uid] => パンテラファン
            [日付] => 20120923
        )

    [6] => 配列
        (
            [uid] => kingsxrules
            [日付] => 20120923
        )

    [7] => 配列
        (
            [uid] => eric.robinson2
            [日付] => 20120926
        )

)

基本的に何をすべきかは、一致する UID があるかどうかを確認することです。一致する場合は、どちらの日付が他の日付よりも新しいかを確認します (基本的にどの日付よりも大きいか)。次に、UID が両方の配列から一致しなかったデータを含む配列にそれらを追加します。

わかりにくかったらすいません。説明するのは少し難しいです。

どんな助けでも大歓迎です、事前に感謝します。

4

2 に答える 2

3

PHP 配列はそれ自体がハッシュ マップであるため、1 つの配列を繰り返し処理し、UID をキーとして各日付を新しい配列に挿入できます。

$out = array();
foreach ($first_array as $x) {
    $out[$x['uid']] = $x['date'];
}

次に、2 番目の配列を反復処理して、UID のいずれかが$out配列内のキーとして既に存在するかどうかを確認します。UID が既に存在する場合は、日付を比較して、好みのデータを取得できます。たとえば、次のようなものです。

foreach ($second_array as $y) {
    if (array_key_exists($y['uid'], $out)) {
        if ($out[$y['uid']] < $y['date']) {
            $out[$y['uid']] = $y['date'];
        }
    } else {
        $out[$y['uid']] = $date;
    }
}

次に、データを元に戻すには、次のようにします。

$_out = array();
foreach ($out as $uid => $date) {
    $_out[] = array("uid" => $uid, "date" => $date);
}
$out = $_out;
于 2012-09-29T03:21:52.090 に答える
0

少し面倒ですが、うまくいきます。

<?php

$arr1 = array(
    array("uid" => "cgajate", "date" => 20120918),
    array("uid" => "badrock5", "date" => 20120920),
    array("uid" => "ricoetc", "date" => 20120921),
    array("uid" => "ricoetc1", "date" => 20120923),
    array("uid" => "darbyfired", "date" => 20120922),
    array("uid" => "sagers.andrew", "date" => 20120922),
    array("uid" => "frankfurt9", "date" => 20120923),
    array("uid" => "beachboys", "date" => 20120923),
    array("uid" => "panterafan", "date" => 20120923),
    array("uid" => "kingsxrules", "date" => 20120923),
    array("uid" => "richard.bitto", "date" => 20120924),
    array("uid" => "christopher.boss", "date" => 20120925),
    array("uid" => "eric.robinson2", "date" => 20120926));


$arr2 = Array(
    array("uid" => "cgajate", "date" => 20120919),
    array("uid" => "ricoetc", "date" => 20120921),
    array("uid" => "ricoetc1", "date" => 20120922),
    array("uid" => "frankfurt9", "date" => 20120923),
    array("uid" => "beachboys", "date" => 20120923),
    array("uid" => "panterafan", "date" => 20120923),
    array("uid" => "kingsxrules", "date" => 20120923),
    array("uid" => "eric.robinson2", "date" => 20120926));

function flatten ($arr) {
    $new_arr = array ();
    foreach ($arr as $sub_arr) {
        $new_arr[$sub_arr["uid"]] = $sub_arr["date"];
    } 
    return $new_arr;
}


$flat_arr1 = flatten ($arr1);
$flat_arr2 = flatten ($arr2);
$arr3 = array ();

foreach ($flat_arr1 as $key=>$value) {
    if (isset ($flat_arr2[$key])) {
        $value = $flat_arr1[$key] > $flat_arr2[$key] ? $flat_arr1[$key] : $flat_arr2[$key];
    }
    $arr3[$key] = $value;
}

foreach ($flat_arr2 as $key=>$value) {
    if (isset ($flat_arr1[$key])) {
        $value = $flat_arr1[$key] > $flat_arr2[$key] ? $flat_arr1[$key] : $flat_arr2[$key];
    }
    $arr3[$key] = $value;
}

?> 

<pre><?php print_r($flat_arr1); ?></pre>

<pre><?php print_r($flat_arr2); ?></pre>

<pre><?php print_r($arr3); ?></pre>
于 2012-09-29T05:31:26.523 に答える