30

どちらも次のような 2 つの配列があります。

Array
(
    [0] => Array
        (
            [name] => STRING
            [value] => STRING
        )

    [1] => Array
        (
            [name] => STRING
            [value] => STRING
        )

    [2] => Array
        (
            [name] => STRING
            [value] => STRING
        )
)

2 つのマスター配列内のサブ配列の ID を比較して、array_intersect を複製できるようにしたいと考えています。これまでのところ、私の試みは成功していません。:(

4

3 に答える 3

52

array_uintersect()次のように、カスタム比較関数を使用するために使用します。

$arr1 = array(
           array('name' => 'asdfjkl;', 'value' => 'foo'),
           array('name' => 'qwerty', 'value' => 'bar'),
           array('name' => 'uiop', 'value' => 'baz'),
        );

$arr2 = array(
           array('name' => 'zxcv', 'value' => 'stuff'),
           array('name' => 'asdfjkl;', 'value' => 'foo'),
           array('name' => '12345', 'value' => 'junk'),
           array('name' => 'uiop', 'value' => 'baz'),
        );

$intersect = array_uintersect($arr1, $arr2, 'compareDeepValue');
print_r($intersect);

function compareDeepValue($val1, $val2)
{
   return strcmp($val1['value'], $val2['value']);
}

あなたが望むように、これは得られます:

Array
(
    [0] => Array
        (
            [name] => asdfjkl;
            [value] => foo
        )

    [2] => Array
        (
            [name] => uiop
            [value] => baz
        )

)
于 2011-04-13T17:59:17.140 に答える
3
function compareDeepValue($val1, $val2)
{
   return strcmp($val1['value'], $val2['value']);
}

関数は最初に配列を並べ替えるため、val2 キーが val1 配列に存在することを確認してください。非常に奇妙な。

于 2015-12-21T13:50:09.083 に答える