array_uintersect
(PHP 5)
array_uintersect — Computes the intersection of arrays, compares data by a callback function
Description
$array1
, array $array2
[, array $...
], callable $value_compare_func
)Computes the intersection of arrays, compares data by a callback function.
Parameters
-
array1
-
The first array.
-
array2
-
The second array.
-
value_compare_func
-
The comparison function must return an integer less than, equal to, or greater than zero if the first argument is considered to be respectively less than, equal to, or greater than the second.
Return Values
Returns an array containing all the values of array1
that are present in all the arguments.
Examples
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"));
?>
The above example will output:
Array ( [a] => green [b] => brown [0] => red )
See Also
- array_intersect() - Computes the intersection of arrays
- array_intersect_assoc() - Computes the intersection of arrays with additional index check
- array_uintersect_assoc() - Computes the intersection of arrays with additional index check, compares data by a callback function
- array_uintersect_uassoc() - Computes the intersection of arrays with additional index check, compares data and indexes by a callback functions
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Расширения, относящиеся к переменным и типам
- Массивы
- array_change_key_case
- array_chunk
- array_column
- array_combine
- array_count_values
- array_diff_assoc
- array_diff_key
- array_diff_uassoc
- array_diff_ukey
- array_diff
- array_fill_keys
- array_fill
- array_filter
- array_flip
- array_intersect_assoc
- array_intersect_key
- array_intersect_uassoc
- array_intersect_ukey
- array_intersect
- array_key_exists
- array_keys
- array_map
- array_merge_recursive
- array_merge
- array_multisort
- array_pad
- array_pop
- array_product
- array_push
- array_rand
- array_reduce
- array_replace_recursive
- array_replace
- array_reverse
- array_search
- array_shift
- array_slice
- array_splice
- array_sum
- array_udiff_assoc
- array_udiff_uassoc
- array_udiff
- array_uintersect_assoc
- array_uintersect_uassoc
- array_uintersect
- array_unique
- array_unshift
- array_values
- array_walk_recursive
- array_walk
- array
- arsort
- asort
- compact
- count
- current
- each
- end
- extract
- in_array
- key_exists
- key
- krsort
- ksort
- list
- natcasesort
- natsort
- next
- pos
- prev
- range
- reset
- rsort
- shuffle
- sizeof
- sort
- uasort
- uksort
- usort
Коментарии
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"));
?>
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.
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');
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;
}
?>