array_uintersect

(PHP 5, PHP 7)

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

Descrierea

array_uintersect ( array $array , array ...$arrays , callable $value_compare_func ) : array

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

Parametri

array

The first array.

arrays

Arrays to compare against.

value_compare_func

Funcția de comparare trebuie să întoarcă un întreg mai mic, egal cu sau mai mare decât zero dacă primul argument este considerat respectiv mai mic, egal cu sau mai mare decât al doilea argument. Notă: înainte de PHP 7.0.0 acest întreg trebuia să fie cuprins în domeniul de la -2147483648 până la 2147483647.

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

Valorile întoarse

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

Exemple

Example #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"));
?>

Exemplul de mai sus va afișa:

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

A se vedea și

add a note add a note

User Contributed Notes 4 notes

up
14
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
1
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.
up
1
Ryan C
2 years ago
If you're rolling your own comparison function, keep in mind that the spaceship operator (i.e. <=>) can be your best friend. It's been around since PHP7. https://www.php.net/manual/en/language.operators.comparison.php

So, for instance, instead of a clunky function like:

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

You can simplify it to:

<?php
function myFunction($v1, $v2) {
   return
$v1 <=> $v2;
}
?>
To Top