44

連想データの行を含む配列があります。

$array1 = array(
    array('ITEM' => 1),
    array('ITEM' => 2),
    array('ITEM' => 3),
);

最初の配列を使用してフィルタリングしたい、関連データの行を含む2番目の配列があります。

$array2 = array(
    array('ITEM' => 2),
    array('ITEM' => 3),
    array('ITEM' => 1),
    array('ITEM' => 4),
);

これはの仕事のように感じますが、より深い値array_diff()でのみ行を比較するにはどうすればよいですか?ITEM

2番目の配列をフィルタリングして次の結果を得るにはどうすればよいですか?

array(3 => array('ITEM' => 4))
4

9 に答える 9

66

を使用してカスタム比較関数を定義できますarray_udiff()

function udiffCompare($a, $b)
{
    return $a['ITEM'] - $b['ITEM'];
}

$arrdiff = array_udiff($arr2, $arr1, 'udiffCompare');
print_r($arrdiff);

出力:

Array
(
    [3] => Array
        (
            [ITEM] => 4
        )
)

これにより、配列の既存の構造が使用および保持されます。これは、必要だと思います。

于 2012-08-06T03:39:30.540 に答える
20

私はおそらく元の配列を繰り返し処理し、それらを1次元にします...次のようなものです

foreach($array1 as $aV){
    $aTmp1[] = $aV['ITEM'];
}

foreach($array2 as $aV){
    $aTmp2[] = $aV['ITEM'];
}

$new_array = array_diff($aTmp1,$aTmp2);
于 2012-08-06T02:10:58.067 に答える
19

トリックを使った別の楽しいアプローチjson_encode(最初のレベルの配列でいくつかの複雑な値を「生」で比較する必要がある場合に役立ちます):

// Compare all values by a json_encode
$diff = array_diff(array_map('json_encode', $array1), array_map('json_encode', $array2));

// Json decode the result
$diff = array_map('json_decode', $diff);
于 2017-03-01T11:32:10.990 に答える
3

以下のコードを使用して違いを得ることができます

$a1 = Array(
    [0] => Array(
            [ITEM] => 1
        )
    [1] => Array(
            [ITEM] => 2
        )
    [2] => Array(
            [ITEM] => 3
        )
    );

$a2 = Array(
    [0] => Array(
            [ITEM] => 2
        )
    [1] => Array(
            [ITEM] => 3
        )

    [2] => Array(
            [ITEM] => 1
        )
    [3] => Array(
            [ITEM] => 4
        ));

array_diff(array_column($a1, 'ITEM'), array_column($a2, 'ITEM'));
于 2018-03-01T10:14:19.583 に答える
-2

array1 を 1 つ以上の他の配列と比較し、他のどの配列にも存在しない array1 の値を返します。

        //Enter your code here, enjoy!

$array1 = array("a" => "green", "red", "blue");
$array2 = array("b" => "green", "yellow", "red");
$result = array_diff($array1, $array2);

print_r($result);
于 2019-05-21T17:27:19.127 に答える