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('111'); $e2 = new Obj('222'); $e3 = new Obj('333'); $e4 = new Obj('444'); $e5 = new Obj('555'); $e6 = new Obj('666'); $arr = [$e1, $e2, $e3, $e4, $e5, $e6]; $arr2 = [$e2, $e3, $e6]; $arr = array_udiff($arr, $arr2, ['Obj', 'cmp']); // $arr = array_udiff($arr, $arr2, ['Obj', 'cmp2']); // 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!