(PHP 5, PHP 7)
array_udiff_uassoc — Veri ve indis karşılaştırması için bir geriçağırım işlevi kullanarak diziler arasındaki farkı indislerine de bakarak bulur
$dizi1
, array $dizi2
[, array $ ...
], callback $veri_karş_işlevi
, callback $anh_karş_işlevi
)Veri ve indis karşılaştırması için bir geriçağırım işlevi kullanarak diziler arasındaki farkı indislerine de bakarak bulur.
Karşılaştırmada array_diff() ve array_udiff() işlevlerinden farklı olarak anahtarlar kullanılır.
dizi1
İlk dizi.
dizi2
İkinci dizi.
veri_karş_işlevi
Veri karşılaştırması için geriçağırım işlevi.
Kullanıcı tarafından sağlanır. Dizi değerlerinin aktarılacağı iki değiştirge kabul etmelidir. Birinci değiştirgenin ikinciden büyük, küçük veya ona eşit olduğu durumlarda sırayla sıfırdan büyük, sıfırdan küçük bir değer veya sıfır döndürmelidir.
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.
anh_karş_işlevi
Anahtarları (indisleri) ayrıca karşılaştırmak için bu işlev kullanılır. Anahtarları karşılaştırmak için dahili bir işlev kullanan array_udiff_assoc() işlevinden farklı olarak bu işlev kullanıcı tanımlı bir işlev kullanır.
Diğer değiştirgelerin hiçbirinde mevcut olmayan tüm
dizi1
değerlerini içeren bir dizi ile döner.
Örnek 1 - array_udiff_uassoc() örneği
<?php
class cr {
private $priv_member;
function cr($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;
}
static function comp_func_key($a, $b)
{
if ($a === $b) return 0;
return ($a > $b)? 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_uassoc($a, $b, array("cr", "comp_func_cr"),
array("cr", "comp_func_key"));
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. 2 geriçağırım işlevi belirtmeyi unutmayın.
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_uassoc($dizi1[0], $dizi2[0], "veri_karş_işlevi", "anh_karş_işlevi"); gibi bir kullanımla sağlayabilirsiniz.