在多维数组上使用array_intersect

Nat*_*han 27 php arrays array-intersect multidimensional-array

我有两个看起来像这样的数组:

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

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

    [2] => Array
        (
            [name] => STRING
            [value] => STRING
        )
)
Run Code Online (Sandbox Code Playgroud)

我希望能够通过比较两个主数组中子数组的ID来复制array_intersect.到目前为止,我的尝试并没有成功.:(

Wis*_*guy 45

使用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']);
}
Run Code Online (Sandbox Code Playgroud)

正如你所希望的那样产生:

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

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

)
Run Code Online (Sandbox Code Playgroud)

  • @bafromca我认为返回strcmp(序列化($ val1),序列化($ val2)); 可能工作 (2认同)