array_udiff

(PHP 5)

array_udiffCalcule la différence entre deux tableaux en utilisant une fonction rappel

Description

array array_udiff ( array $array1 , array $array2 [, array $ ... ], callable $data_compare_func )

Calcule la différence entre deux tableaux en utilisant une fonction rappel. Cette fonctionne agit comme la fonction array_diff() qui utilise une fonction interne pour comparer les données.

Liste de paramètres

array1

Le premier tableau.

array2

Le second tableau.

data_compare_func

La fonction de comparaison.

La fonction de comparaison doit retourner un entier inférieur à, égal à, ou supérieur à 0 si le premier argument est considéré comme, respectivement, inférieur à, égal à, ou supérieur au second.

int callback ( mixed $a, mixed $b )

Valeurs de retour

Retourne un tableau contenant toutes les valeurs du tableau array1 qui ne sont pas présentes dans aucun autre argument.

Exemples

Exemple #1 Exemple avec array_udiff() en utilisant les objets stdClass

<?php
// Arrays to compare
$array1 = array(new stdclass, new stdclass,
				new stdclass, new stdclass,
			   );

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

// Définit quelques propriétés pour chaque objet
$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'));
?>
<?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;
		}
	}
}

// Crée un calendrier pour les rendez-vous hébdomadaires
$myCalendar = new MyCalendar;

// Enregistre quelques rendez-vous pour cette semaine
$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.");

// Vérifie la disponibilité en jours, en comparant les dates $booked avec les dates $free
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"; 
}
?>

L'exemple ci-dessus va afficher :

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.

Notes

Note: Notez que cette fonction ne vérifie qu'une seule dimension d'un tableau multidimensionnel. Vous pouvez, bien sûr, tester une dimension particulière en utilisant par exemple array_udiff($array1[0], $array2[0], "data_compare_func");.

Voir aussi

  • array_diff() - Calcule la différence entre des tableaux
  • array_diff_assoc() - Calcule la différence de deux tableaux, en prenant aussi en compte les clés
  • array_diff_uassoc() - Calcule la différence entre deux tableaux associatifs, à l'aide d'une fonction de rappel
  • array_udiff_assoc() - Calcule la différence entre des tableaux avec vérification des index, compare les données avec une fonction de rappel
  • array_udiff_uassoc() - Calcule la différence de deux tableaux associatifs, compare les données et les index avec une fonction de rappel
  • array_intersect() - Calcule l'intersection de tableaux
  • array_intersect_assoc() - Calcule l'intersection de deux tableaux avec des tests sur les index
  • array_uintersect() - Calcule l'intersection de deux tableaux, compare les données en utilisant une fonction de rappel
  • array_uintersect_assoc() - Calcule l'intersection de deux tableaux avec des tests sur l'index, compare les données en utilisant une fonction de rappel
  • array_uintersect_uassoc() - Calcule l'intersection de deux tableaux avec des tests sur l'index, compare les données et les indexes des deux tableaux en utilisant une fonction de rappel

LoadingChargement en cours