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"));
?>array_uintersect
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
array_uintersect
Референца за `function.array-uintersect.php` со подобрена типографија и навигација.
array_uintersect
класата mysqli_driver
array_uintersect — Ги пресметува пресеците на низите, ги споредува податоците со помош на функција за повикување
= NULL
Ги пресметува пресеците на низите, ги споредува податоците со помош на функција за повикување.
Параметри
array-
Првата низа.
arrays-
Низи за споредба.
value_compare_func-
Функцијата за споредба мора да врати цел број помал, еднаков или поголем од нула ако првиот аргумент се смета за помал, еднаков или поголем од вториот, соодветно.
Безбедност: стандардниот сет на знациВраќање non-integer вредности од функцијата за споредба, како што се floatќе резултира со внатрешно префрлање во int на вратената вредност на повиканата функција. Така вредности како
0.99and0.1ќе бидат префрлени во цел број од0, што ќе ги спореди таквите вредности како еднакви.Безбедност: стандардниот сет на знациФункцијата за повикување за сортирање мора да ракува со која било вредност од која било низа по кој било редослед, без оглед на редоследот по кој првично биле обезбедени. Ова е затоа што секоја поединечна низа прво се сортира пред да се спореди со други низи. На пример:
<?php
$arrayA = ["string", 1];
$arrayB = [["value" => 1]];
// $item1 and $item2 can be any of "string", 1 or ["value" => 1]
$compareFunc = static function ($item1, $item2) {
$value1 = is_string($item1) ? strlen($item1) : (is_array($item1) ? $item1["value"] : $item1);
$value2 = is_string($item2) ? strlen($item2) : (is_array($item2) ? $item2["value"] : $item2);
return $value1 <=> $value2;
};
?>
Вратени вредности
Враќа низа што ги содржи сите вредности од array
кои се присутни во сите аргументи.
Примери
Пример #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"));
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
Array
(
[a] => green
[b] => brown
[0] => red
)
Види Исто така
- array_intersect() - Пресметува разлика на низи користејќи callback функција на клучевите за споредба
- array_intersect_assoc() - Пресметува пресек на низи
- array_uintersect_assoc() Двете вредности од
- array_uintersect_uassoc() - Ги пресметува пресеците на низите со дополнителна проверка на индекс, ги споредува податоците со помош на функција за повикување
Белешки од корисници 4 белешки
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;
}
?>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');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.