Heim >Backend-Entwicklung >PHP-Tutorial >Beheben von Problemen, die bei der Verwendung der PHP-Funktion array_udiff auftreten

Beheben von Problemen, die bei der Verwendung der PHP-Funktion array_udiff auftreten

黄舟
黄舟Original
2017-03-20 09:17:281626Durchsuche

Lösung für Probleme bei der Verwendung der PHP-Funktion array_udiff-Funktion

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

Hinweise zur Verwendung von array_diff:

1 Zum Differenzsatz bleiben die Schlüsselnamen unverändert

2 Die beiden Einheiten werden nur berücksichtigt, wenn (string) $elem1 === (string) $elem2 sind gleich. Das heißt, wenn der Ausdruck von string derselbe ist.

Ähnliche Funktionen:

array_diff_assoc
array_diff_uassoc
array_diff_key
array_diff_ukey
array_udiff_assoc
array_udiff_uassoc

Zusammenfassung:

array_diff, array_udiff nur basierend auf Wertbeurteilung

array_diff_key, array_diff_ukey beurteilen nur basierend auf Schlüssel

array_diff_assoc, array_diff_uassoc, array_udiff_assoc, array_udiff_uassoc beurteilen basierend auf Schlüssel und Wert zusammen

Das obige ist der detaillierte Inhalt vonBeheben von Problemen, die bei der Verwendung der PHP-Funktion array_udiff auftreten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn