The example #1 can be modified (PHP 7 or higher) by using Spaceship operator (<=>):
<?php
//…
static function comp_func_cr($a, $b)
{
return $a->priv_member <=> $b->priv_member;
}
//…
?>
(PHP 5, PHP 7, PHP 8)
array_udiff_assoc — Veri karşılaştırması için bir geriçağırım işlevi kullanarak diziler arasındaki farkı indislerine de bakarak bulur
Veri karşılaştırması için bir geriçağırım işlevi kullanarak diziler arasındaki farkı indislerine de bakarak bulur.
Bilginize: Bu işlevin bir n boyutlu dizinin tek bir boyutunu ele alacağına dikkat ediniz. Şüphesiz daha fazla sayıda boyutun hesaba katılmasını, örneğin
array_udiff_assoc($dizi1[0], $dizi2[0], "veri_karş_işlevi");
gibi bir kullanımla sağlayabilirsiniz.
dizi
İlk dizi.
diziler
Karşılaştırılacak diziler.
değer_karş_işlevi
Karşılaştırma işlevinin, ilk bileşeninin ikinci bileşenden küçük, eşit veya büyük olması durumunda sıfırdan küçük, eşit veya büyük bir tamsayı döndürmesi gerekir.
Karşılaştırma işlevinden float gibi
tamsayı olmayan değerlerin döndürülmesi, geri çağırım
işlevinin dönüş değerinin dahili olarak int türüne
dönüştürülmesiyle sonuçlanır. Bu nedenle 0.99
ve
0.1
gibi değerlerin her ikisi de 0
tamsayı değerine dönüştürüp bunlar eşit değerler olarak karşılaştırılacaktır.
Diğer bağımsız değişkenlerin hiçbirinde mevcut olmayan tüm
dizi
değerlerini içeren bir dizi ile döner.
Karşılaştırmada array_diff() ve
array_udiff() işlevlerinden farklı olarak anahtarlar
kullanılır. Verilerin karşılaştırması kullanıcı tarafından tanımlanmış
bir işlev kullanılarak yapılır. Verileri karşılaştırmak için dahili bir
işlev kullanan array_diff_assoc() işlevinden farklı
olarak bu işlev kullanıcı tanımlı bir işlev kullanır.
Örnek 1 - array_udiff_assoc() örneği
<?php
class cr {
private $priv_member;
function __construct($val)
{
$this->priv_member = $val;
}
static function comp_func_cr($a, $b)
{
if ($a->priv_member === $b->priv_member) return 0;
return ($a->priv_member > $b->priv_member)? 1:-1;
}
}
$a = array("0.1" => new cr(9), "0.5" => new cr(12), 0 => new cr(23),
1=> new cr(4), 2 => new cr(-15),);
$b = array("0.2" => new cr(9), "0.5" => new cr(22), 0 => new cr(3),
1=> new cr(4), 2 => new cr(-15),);
$result = array_udiff_assoc($a, $b, array("cr", "comp_func_cr"));
print_r($result);
?>
Yukarıdaki örneğin çıktısı:
Array ( [0.1] => cr Object ( [priv_member:private] => 9 ) [0.5] => cr Object ( [priv_member:private] => 12 ) [0] => cr Object ( [priv_member:private] => 23 ) )
Yukarıdaki örnekte gördüğünüz gibi "1" => new cr(4)
çifti her iki dizide de mevcut olduğundan çıktıda gözükmemektedir.
The example #1 can be modified (PHP 7 or higher) by using Spaceship operator (<=>):
<?php
//…
static function comp_func_cr($a, $b)
{
return $a->priv_member <=> $b->priv_member;
}
//…
?>
Difference between array_udiff_assoc() and array_diff_assoc()
- array_udiff_assoc(): Compares the DATA with the user supplied callback function
- array_diff_assoc(): Compares the INDEX with the user supplied callback function