Maison >développement back-end >tutoriel php >Résolution des problèmes rencontrés lors de l'utilisation de la fonction PHP array_udiff

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

黄舟
黄舟original
2017-03-20 09:17:281625parcourir

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);

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

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!

Déclaration:
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