array_uintersect

(PHP 5, PHP 7)

array_uintersectComputes the intersection of arrays, compares data by a callback function

Opis

array_uintersect ( array $array1 , array $array2 [, array $... ], callable $value_compare_func ) : array

Computes the intersection of arrays, compares data by a callback function.

Parametry

array1

The first array.

array2

The second array.

value_compare_func

Funkcja porównująca musi zwrócić liczbę całkowitą mniejszą, równą lub większą od zera jeśli pierwszy argument jest uważany za odpowiednio mniejszy, równy lub większy od drugiego. Przed PHP 7.0.0 ta liczba musiała być z zakresu -2147483648 do 2147483647.

callback ( mixed $a, mixed $b ) : int

Zwracane wartości

Returns an array containing all the values of array1 that are present in all the arguments.

Przykłady

Przykład #1 array_uintersect() example

<?php
$array1 
= array("a" => "green""b" => "brown""c" => "blue""red");
$array2 = array("a" => "GREEN""B" => "brown""yellow""red");

print_r(array_uintersect($array1$array2"strcasecmp"));
?>

Powyższy przykład wyświetli:

Array
(
    [a] => green
    [b] => brown
    [0] => red
)

Zobacz też:

add a note add a note

User Contributed Notes 3 notes

up
11
Nate at RuggFamily dot com
17 years ago
I want to stress that in the user function, you do need to return either a 1 or a -1 properly; you cannot simply return 0 if the results are equal and 1 if they are not. 

The following code is incorrect:

<?php
function myfunction($v1,$v2)
{
if (
$v1===$v2)
    {
    return
0;
    }
return
1;
}

$a1=array(1, 2, 4);
$a2=array(1, 3, 4);
print_r(array_uintersect($a1,$a2,"myfunction"));
?>

This code is correct:

<?php
function myfunction($v1,$v2)
{
if (
$v1===$v2)
    {
    return
0;
    }
if (
$v1 > $v2) return 1;
return -
1;
}
$a1=array(1, 2, 4);
$a2=array(1, 3, 4);
print_r(array_uintersect($a1,$a2,"myfunction"));
?>
up
1
rob dot c dot ruiz at gmail dot com
5 years ago
When trying to do a case insensitive comparison between arrays of words, the strcasecmp function works very nicely with this one like so:

$arr1 = array('blue', 'green', 'red');

$arr2 = array('BLUE', 'Purple', 'Red');

$loose_matches = array_uintersect($arr1, $arr2, 'strcasecmp');

print_r($loose_matches) // array('blue', 'red');
up
0
Hayley Watson
6 years ago
As for the other "compare function" callbacks, the return value from the callback function doesn't need to be -1, 0, or 1.

cmp($a,$b) just needs to be <0, =0, or >0 depending on whether $a<$b, $a=$b, or $a>$b.
To Top