Résolution des problèmes rencontrés lors de l'utilisation de la fonction PHP array_udiff

黄舟
Libérer: 2023-03-06 19:10:01
original
1593 Les gens l'ont consulté

Solution aux problèmes rencontrés lors de l'utilisation de la fonction PHP array_udiff

<?php
// array_udiff()
class Obj
{
	private $code = 0;

	public function construct($code)
	{
		$this->code = intval($code);
	}

	public function getCode()
	{
		return $this->code;
	}

	/**
	 * 该函数必须根据实际情况返回 0, 1, -1 这三种值,才能正确计算出差集
	 */
	public static function cmp($a, $b)
	{
		if ($a->getCode() === $b->getCode()) return 0;
		return $a->getCode() > $b->getCode() ? 1 : -1;
	}

	/**
	 * 此种形式是在《深入PHP面向对象模式与实践》一书看到的写法
	 * 经验证是无效的,具体在第十章讲解组合模式处
	 */
	public static function cmp2($a, $b)
	{
		return $a === $b ? 0 : 1;
	}
}

$e1 = new Obj(&#39;111&#39;);
$e2 = new Obj(&#39;222&#39;);
$e3 = new Obj(&#39;333&#39;);
$e4 = new Obj(&#39;444&#39;);
$e5 = new Obj(&#39;555&#39;);
$e6 = new Obj(&#39;666&#39;);

$arr = [$e1, $e2, $e3, $e4, $e5, $e6];
$arr2 = [$e2, $e3, $e6];

$arr = array_udiff($arr, $arr2, [&#39;Obj&#39;, &#39;cmp&#39;]);
// $arr = array_udiff($arr, $arr2, [&#39;Obj&#39;, &#39;cmp2&#39;]); // cmp2 这个比较方法无法返回正确结果
var_dump($arr);
Copier après la connexion

notes d'utilisation de array_diff :

1. à l'ensemble de différences, les noms de clés restent inchangés

2 Les deux unités ne sont prises en compte que lorsque (string) $elem1 === (string) $elem2. sont les mêmes. C'est-à-dire lorsque l'expression de chaîne est la même.

Fonctions similaires :

array_diff_assoc
array_diff_uassoc
array_diff_key
array_diff_ukey
array_udiff_assoc
array_udiff_uassoc
Copier après la connexion

Résumé :

array_diff, array_udiff uniquement basé sur jugement de valeur

array_diff_key, array_diff_ukey juge uniquement basé sur la clé

array_diff_assoc, array_diff_uassoc, array_udiff_assoc, array_udiff_uassoc juge basé sur la clé et la valeur ensemble

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!