array_udiff、array_udiff_assoc、array_udiff_uassoc 使用方法

 
<?php

// array_udiff 用自定义函数比较数组的差值(array_diff 使用内置函数)
// 使用该函数我们通过进行更复杂的比较

class Rectangle
{
    public $width;

    public $height;

    public function __construct($width, $height)
    {
        $this->width = $width;
        $this->height = $height;
    }
}

$array1 = [
    'a' => new Rectangle(1, 2),
    'b' => new Rectangle(2, 3),
];

$array2 = [
    'a' => new Rectangle(2, 3),
    'c' => new Rectangle(3, 5),
];

// 键比较函数
function compare_key($key1, $key2) {
    if ($key1 == $key2) {
        return 0;
    }

    return $key1 > $key2 ? 1 : -1;
}

// 值比较函数
function compare_area(Rectangle $value1, Rectangle $value2) {
    $area1 = $value1->width * $value1->height;
    $area2 = $value2->width * $value2->height;

    if ($area1 == $area2) {
        return 0;
    }
    return $area1 > $area2 ? 1 : -1;
}

// 返回数据差集, 只比较值
var_dump(array_udiff($array1, $array2, 'compare_area'));

// 返回数据差集, 同时检查键值(键的比较使用内置方法)
var_dump(array_udiff_assoc($array1, $array2, 'compare_area'));

// 返回数据差集, 同时检查键值(键的比较使用自定义函数)
var_dump(array_udiff_uassoc($array1, $array2, 'compare_area', 'compare_key'));

 

 

array(1) {
  ["a"]=>
  object(Rectangle)#1 (2) {
    ["width"]=>
    int(1)
    ["height"]=>
    int(2)
  }
}
array(2) {
  ["a"]=>
  object(Rectangle)#1 (2) {
    ["width"]=>
    int(1)
    ["height"]=>
    int(2)
  }
  ["b"]=>
  object(Rectangle)#2 (2) {
    ["width"]=>
    int(2)
    ["height"]=>
    int(3)
  }
}
array(2) {
  ["a"]=>
  object(Rectangle)#1 (2) {
    ["width"]=>
    int(1)
    ["height"]=>
    int(2)
  }
  ["b"]=>
  object(Rectangle)#2 (2) {
    ["width"]=>
    int(2)
    ["height"]=>
    int(3)
  }
}

  

 

转载于:https://www.cnblogs.com/eleven24/p/8808316.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值