array_udiff

(PHP 5, PHP 7, PHP 8)

array_udiffVeri karşılaştırması için bir geriçağırım işlevi kullanarak diziler arasındaki farkı bulur

Açıklama

array_udiff(array$dizi, array...$diziler, callable$değer_karş_işlevi): array

Veri karşılaştırması için dahili bir işlev kullanan array_diff() işlevinden farklı olarak, veri karşılaştırması için bir geriçağırım işlevi kullanarak diziler arasındaki farkı bulur.

Bağımsız Değişkenler

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.

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

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.

Dönen Değerler

Diğer bağımsız değişkenlerin hiçbirinde mevcut olmayan tüm dizi değerlerini içeren bir dizi ile döner.

Örnekler

Örnek 1 - stdClass nesneleri kullanılan array_udiff() örneği

<?php
// Karşılaştırılacak diziler
$array1 = array(new stdClass, new stdClass,
new
stdClass, new stdClass,
);

$array2 = array(
new
stdClass, new stdClass,
);

// Her nesneye özellik ata
$array1[0]->width = 11; $array1[0]->height = 3;
$array1[1]->width = 7; $array1[1]->height = 1;
$array1[2]->width = 2; $array1[2]->height = 9;
$array1[3]->width = 5; $array1[3]->height = 7;

$array2[0]->width = 7; $array2[0]->height = 5;
$array2[1]->width = 9; $array2[1]->height = 2;

function
compare_by_area($a, $b) {
$areaA = $a->width * $a->height;
$areaB = $b->width * $b->height;

if (
$areaA < $areaB) {
return -
1;
} elseif (
$areaA > $areaB) {
return
1;
} else {
return
0;
}
}
print_r(array_udiff($array1, $array2, 'compare_by_area'));
?>

Yukarıdaki örneğin çıktısı:

Array ( [0] => stdClass Object ( [width] => 11 [height] => 3 ) [1] => stdClass Object ( [width] => 7 [height] => 1 ) )

Örnek 2 - DateTime nesneleri kullanılan array_udiff() örneği

<?php
class MyCalendar {
public
$free = array();
public
$booked = array();

public function
__construct($week = 'now') {
$start = new DateTime($week);
$start->modify('Monday this week midnight');
$end = clone $start;
$end->modify('Friday this week midnight');
$interval = new DateInterval('P1D');
foreach (new
DatePeriod($start, $interval, $end) as $freeTime) {
$this->free[] = $freeTime;
}
}

public function
bookAppointment(DateTime $date, $note) {
$this->booked[] = array('date' => $date->modify('midnight'), 'note' => $note);
}

public function
checkAvailability() {
return
array_udiff($this->free, $this->booked, array($this, 'customCompare'));
}

public function
customCompare($free, $booked) {
if (
is_array($free)) $a = $free['date'];
else
$a = $free;
if (
is_array($booked)) $b = $booked['date'];
else
$b = $booked;
if (
$a == $b) {
return
0;
} elseif (
$a > $b) {
return
1;
} else {
return -
1;
}
}
}

// Haftalık randevular için bir takvim oluştur
$myCalendar = new MyCalendar;

// Bu hafta için bazı randevular al
$myCalendar->bookAppointment(new DateTime('Monday this week'), "Cleaning GoogleGuy's apartment.");
$myCalendar->bookAppointment(new DateTime('Wednesday this week'), "Going on a snowboarding trip.");
$myCalendar->bookAppointment(new DateTime('Friday this week'), "Fixing buggy code.");

// $booked tarihleri $free tarihlerle karşılaştırarak günlerin uygunluğuna bak
echo "I'm available on the following days this week...\n\n";
foreach (
$myCalendar->checkAvailability() as $free) {
echo
$free->format('l'), "\n";
}
echo
"\n\n";
echo
"I'm busy on the following days this week...\n\n";
foreach (
$myCalendar->booked as $booked) {
echo
$booked['date']->format('l'), ": ", $booked['note'], "\n";
}
?>

Yukarıdaki örneğin çıktısı:

I'm available on the following days this week... Tuesday Thursday I'm busy on the following days this week... Monday: Cleaning GoogleGuy's apartment. Wednesday: Going on a snowboarding trip. Friday: Fixing buggy code.

Notlar

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($dizi1[0], $dizi2[0], "veri_karş_işlevi"); gibi bir kullanımla sağlayabilirsiniz.

Ayrıca Bakınız

  • array_diff() - Dizilerin farkını hesaplar
  • array_diff_assoc() - Dizilerin farkını hesaplarken ek olarak indisleri de karşılaştırır
  • array_diff_uassoc() - Dizilerin farkını hesaplarken ek olarak bir geriçağırım işlevi üzerinden indisleri de karşılaştırır
  • 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
  • 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
  • array_intersect() - Dizilerin kesişimini hesaplar
  • array_intersect_assoc() - Dizilerin kesişimini hesaplarken ek olarak indisleri de karşılaştırır
  • array_uintersect() - Veriyi bir geriçağırım işleviyle karşılaştırarak dizilerin kesişimini hesaplar
  • array_uintersect_assoc() - Veriyi bir geriçağırım işleviyle karşılaştırarak dizilerin kesişimini hesaplarken ek olarak indislere de bakar
  • array_uintersect_uassoc() - Değerleri ve indisleri farklı geriçağırım işlevleriyle karşılaştırarak dizilerin kesişimini hesaplarken ek olarak indislere de bakar
To Top