array_udiff

(PHP 5, PHP 7, PHP 8)

array_udiff Ermittelt den Unterschied zwischen Arrays mittels einer Callbackfunktion für den Datenvergleich

Beschreibung

array_udiff(array $array, array ...$arrays, callable $value_compare_func): array

Ermittelt den Unterschied zwischen Arrays mittels einer Callbackfunktion für den Datenvergleich. Dies ist anders als bei array_diff(), das eine interne Funktion zum Vergleichen der Daten verwendet.

Parameter-Liste

array

Das erste Array.

arrays

Arrays zum Vergleichen.

value_compare_func

Die Callback-Vergleichsfunktion.

Die Vergleichsfunktion muss einen Integer kleiner als, gleich oder größer als Null zurückgeben, wenn das erste Argument respektive kleiner, gleich oder größer als das zweite ist.

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

Rückgabewerte

Gibt ein Array zurück, das alle Werte von array enthält, die nicht in einem der anderen Argumente vorhanden sind.

Beispiele

Beispiel #1 array_udiff() Beispiel mit stdClass Objekten

<?php
// Die zu vergleichenden Arrays
$array1 = array(new stdclass, new stdclass,
                new 
stdclass, new stdclass,
               );

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

// Setze einige Eigenschaften für jedes Objekt
$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'));
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

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

    [1] => stdClass Object
        (
            [width] => 7
            [height] => 1
        )

)

Beispiel #2 array_udiff() Beispiel mit DateTime Objekten

<?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;
        }
    }
}

// Erzeuge einen Kalender für wöchentliche Termine
$myCalendar = new MyCalendar;

// Buche einige Termine für diese Woche
$myCalendar->bookAppointment(new DateTime('Monday this week'), "GoogleGuys Wohnung reinigen.");
$myCalendar->bookAppointment(new DateTime('Wednesday this week'), "Snowboard fahren gehen.");
$myCalendar->bookAppointment(new DateTime('Friday this week'), "Fehlerhaften Code beheben.");

// Prüfe die Verfügbarkeit von Tagen durch Vergleichen von $booked Daten mit $free Daten
echo "Ich bin an den folgenden Tagen dieser Woche verfügbar...\n\n";
foreach (
$myCalendar->checkAvailability() as $free) {
    echo 
$free->format('l'), "\n";
}
echo 
"\n\n";
echo 
"Ich bin an den folgenden Tagen dieser Woche beschäftigt...\n\n";
foreach (
$myCalendar->booked as $booked) {
    echo 
$booked['date']->format('l'), ": "$booked['note'], "\n";
}
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Ich bin an den folgenden Tagen dieser Woche verfügbar...

Tuesday
Thursday


Ich bin an den folgenden Tagen dieser Woche beschäftigt...

Monday: GoogleGuys Wohnung reinigen.
Wednesday: Snowboard fahren gehen.
Friday: Fehlerhaften Code beheben.

Anmerkungen

Hinweis: Bitte beachten Sie, dass diese Funktion nur eine Dimension eines n-dimensionalen Arrays überprüft. Natürlich können Sie tiefere Dimensionen prüfen, indem Sie array_udiff($array1[0], $array2[0], "data_compare_func"); verwenden.

Siehe auch

  • array_diff() - Ermittelt die Unterschiede zwischen Arrays
  • array_diff_assoc() - Berechnet den Unterschied zwischen Arrays mit zusätzlicher Indexprüfung
  • array_diff_uassoc() - Berechnet den Unterschied von Arrays mit zusätzlicher Indexprüfung, welche durch eine benutzerdefinierte Callback-Funktion vorgenommen wird
  • array_udiff_assoc() - Ermittelt den Unterschied zwischen Arrays mit zusätzlicher Indexprüfung, vergleicht mittels einer Callbackfunktion
  • array_udiff_uassoc() - Ermittelt den Unterschied zwischen Arrays mit zusätzlicher Indexprüfung, vergleicht Daten und Indizes mittels einer Callbackfunktion
  • array_intersect() - Ermittelt die Schnittmenge von Arrays
  • array_intersect_assoc() - Ermittelt die Schnittmenge von Arrays mit zusätzlicher Indexprüfung
  • array_uintersect() - Ermittelt die Schnittmenge von Arrays, vergleicht Daten mittels einer Callbackfunktion
  • array_uintersect_assoc() - Ermittelt die Schnittmenge von Arrays mit zusätzlicher Indexprüfung, vergleicht Daten mittels einer Callbackfunktion
  • array_uintersect_uassoc() - Ermittelt die Schnittmenge von Arrays mit zusätzlicher Indexprüfung, vergleicht Daten und Schlüssel mittels separaten Callbackfunktionen

Hier Kannst Du einen Kommentar verfassen


Bitte gib mindestens 10 Zeichen ein.
Wird geladen... Bitte warte.
* Pflichtangabe
Es sind noch keine Kommentare vorhanden.

Was genau bedeutet "Vibe Coding"? Ein tiefgehender Blick für Entwickler

In der Welt der Softwareentwicklung gibt es unzählige Wege, wie man an ein Projekt herangeht. Manche schwören auf strikte Planung, andere auf bewährte Algorithmen und wieder andere lassen sich von etwas ganz anderem leiten: ihrem Gefühl. ...

admin

Autor : admin
Kategorie: Software & Web-Development

PHP cURL-Tutorial: Verwendung von cURL zum Durchführen von HTTP-Anfragen

cURL ist eine leistungsstarke PHP-Erweiterung, die es Ihnen ermöglicht, mit verschiedenen Servern über verschiedene Protokolle wie HTTP, HTTPS, FTP und mehr zu kommunizieren. ...

TheMax

Autor : TheMax
Kategorie: PHP-Tutorials

Midjourney Tutorial - Anleitung für Anfänger

Über Midjourney, dem Tool zur Erstellung digitaler Bilder mithilfe von künstlicher Intelligenz, gibt es ein informatives Video mit dem Titel "Midjourney Tutorial auf Deutsch - Anleitung für Anfänger" ...

Mike94

Autor : Mike94
Kategorie: KI Tutorials

Tutorial veröffentlichen

Tutorial veröffentlichen

Teile Dein Wissen mit anderen Entwicklern weltweit

Du bist Profi in deinem Bereich und möchtest dein Wissen teilen, dann melde dich jetzt an und teile es mit unserer PHP-Community

mehr erfahren

Tutorial veröffentlichen

"Baustellen" endlich angehen?

It's great to hear you're tackling those long-postponed projects! Outdoor lighting can indeed be a challenge, but it's rewarding once completed. I ...

Geschrieben von boilersuitchorus am 28.10.2025 08:56:00
Forum: Off-Topic Diskussionen
json Rückgabe von Open Weather darstellen

Es ist wie du gesagt hast, sobald man es richtig lesen kann, ist das Auslesen super einfach. Danke für den Tipp. Die Lösung, sollte sie nochmal ...

Geschrieben von Chaos_Lord am 22.10.2025 19:07:27
Forum: PHP Developer Forum
Fatal Error bei übergabe an Datenbank 1 Formular funktioniert das andere nicht

Achte auf meine Hinweise, die ich nachträglich geschrieben habe.

Geschrieben von scatello am 16.10.2025 20:02:05
Forum: PHP Developer Forum
Fatal Error bei übergabe an Datenbank 1 Formular funktioniert das andere nicht

konnte es mittlerweile lösen. habe zeile für zeile nochmal auseinander genommen nur um dann festzustellen das die Meldung vorher von einer ander ...

Geschrieben von phppower am 16.10.2025 20:01:14
Forum: PHP Developer Forum