1

2 つの配列があり、どちらも 2 次元です。スプレッドシートの行と DB の行を比較しています。両方の配列の配列キーは同じです。

DB フェッチからの配列

$array1 = Array
(
[0] => Array
    (
        [uid] => 1
        [fname] => abc
        [lname] => deg
        [phone] => 123456789
    )
[1] => Array
    (
        [uid] => 2
        [fname] => jkl
        [lname] => xyz
        [phone] => 987654321
    )
[2] => Array
    (
        [uid] => 3
        [fname] => pqr
        [lname] => stu
        [phone] => 111111111
    )

スプレッドシートから作成された配列

$array2 = Array
(
[0] => Array
    (
        [uid] => 1
        [fname] => abc
        [lname] => deg
        [phone] => 4444444
    )
[1] => Array
    (
        [uid] => 3
        [fname] => pqr
        [lname] => stu
        [phone] => 111111111
    )
[2] => Array
    (
        [uid] => 4
        [fname] => aaa
        [lname] => bbb
        [phone] => 9999999
    )

今、特定のユーザーのキーと値が異なるだけが必要です。

例: uid=1 の場合、電話のみが表示されます。uid=2 の場合、配列全体が表示されます。uid=3 の場合、none (空の配列) が表示されます。

私は array_diff() を使用しましたが、うまくいきました。しかし問題は、結果として私のコードが比較されることです(uidに関係なく)。array1 の uid を array2 の uid と比較したい。

4

1 に答える 1

2

uid を使用して配列のインデックスを再作成し、比較します。

$new1 = array();
foreach ($array1 as $value){
    $new1[$value['uid']] = $value;
}
$new2 = array();
foreach ($array2 as $value){
    $new2[$value['uid']] = $value;
}
$diff = array();
foreach ($new1 as $key => $value){
    //compare $value with $new2[$key]
    if (isset($new2[$key])){
        $diff[$key] = array_diff($value, $new2[$key]);
    }
}
于 2013-06-25T08:27:58.443 に答える