array_udiff

(PHP 5, PHP 7)

array_udiff用回调函数比较数据来计算数组的差集

说明

array_udiff ( array $array1 , array $array2 [, array $... ], callable $value_compare_func ) : array

使用回调函数比较数据,计算数组的不同之处。和 array_diff() 不同的是,前者使用内置函数进行数据比较。

参数

array1

第一个数组。

array2

第二个数组。

value_compare_func

回调对照函数。

在第一个参数小于,等于或大于第二个参数时,该比较函数必须相应地返回一个小于,等于或大于 0 的整数。

callback ( mixed $a, mixed $b ) : int

返回值

返回 array1 里没有出现在其他参数里的所有值。

范例

Example #1 array_udiff() 使用 stdClass 对象的例子

<?php
// Arrays to compare
$array1 = array(new stdclass, new stdclass,
                new 
stdclass, new stdclass,
               );

$array2 = array(
                new 
stdclass, new stdclass,
               );

// Set some properties for each object
$array1[0]->width 11$array1[0]->height 3;
$array1[1]->width 7;  $array1[1]->height 1;
$array1[2]->width 2;  $array1[2]->height 9;
$array1[3]->width 5;  $array1[3]->height 7;

$array2[0]->width 7;  $array2[0]->height 5;
$array2[1]->width 9;  $array2[1]->height 2;

function 
compare_by_area($a$b) {
    
$areaA $a->width $a->height;
    
$areaB $b->width $b->height;
    
    if (
$areaA $areaB) {
        return -
1;
    } elseif (
$areaA $areaB) {
        return 
1;
    } else {
        return 
0;
    }
}

print_r(array_udiff($array1$array2'compare_by_area'));
?>

以上例程会输出:

Array
(
    [0] => stdClass Object
        (
            [width] => 11
            [height] => 3
        )

    [1] => stdClass Object
        (
            [width] => 7
            [height] => 1
        )

)

Example #2 array_udiff() 使用 DateTime 对象的例子

<?php
class MyCalendar {
    public 
$free = array();
    public 
$booked = array();

    public function 
__construct($week 'now') {
        
$start = new DateTime($week);
        
$start->modify('Monday this week midnight');
        
$end = clone $start;
        
$end->modify('Friday this week midnight');
        
$interval = new DateInterval('P1D');
        foreach (new 
DatePeriod($start$interval$end) as $freeTime) {
            
$this->free[] = $freeTime;
        }
    }

    public function 
bookAppointment(DateTime $date$note) {
        
$this->booked[] = array('date' => $date->modify('midnight'), 'note' => $note);
    }

    public function 
checkAvailability() {
        return 
array_udiff($this->free$this->booked, array($this'customCompare'));
    }
    
    public function 
customCompare($free$booked) {
        if (
is_array($free)) $a $free['date'];
        else 
$a $free;
        if (
is_array($booked)) $b $booked['date'];
        else 
$b $booked;
        if (
$a == $b) {
            return 
0;
        } elseif (
$a $b) {
            return 
1;
        } else {
            return -
1;
        }
    }
}

// Create a calendar for weekly appointments
$myCalendar = new MyCalendar;

// Book some appointments for this week
$myCalendar->bookAppointment(new DateTime('Monday this week'), "Cleaning GoogleGuy's apartment.");
$myCalendar->bookAppointment(new DateTime('Wednesday this week'), "Going on a snowboarding trip.");
$myCalendar->bookAppointment(new DateTime('Friday this week'), "Fixing buggy code.");

// Check availability of days by comparing $booked dates against $free dates
echo "I'm available on the following days this week...\n\n";
foreach (
$myCalendar->checkAvailability() as $free) {
    echo 
$free->format('l'), "\n"
}
echo 
"\n\n";
echo 
"I'm busy on the following days this week...\n\n";
foreach (
$myCalendar->booked as $booked) {
    echo 
$booked['date']->format('l'), ": "$booked['note'], "\n"
}
?>

以上例程会输出:

I'm available on the following days this week...

Tuesday
Thursday


I'm busy on the following days this week...

Monday: Cleaning GoogleGuy's apartment.
Wednesday: Going on a snowboarding trip.
Friday: Fixing buggy code.

注释

Note: 注意本函数只检查了多维数组中的一维。当然,可以用 array_udiff($array1[0], $array2[0], "data_compare_func"); 来检查更深的维度。

参见

相关文章
php 数组 函数 带索引检查计算数组的差集php 数组 函数 使用键名比较计算数组的差集php 数组 函数 用用户提供的回调函数做索引检查来计算数组的差集php 数组 函数 用回调函数对键名比较计算数组的差集php 数组 函数 使用键名比较计算数组的交集php 数组 函数 带索引检查计算数组的交集,用回调函数比较索引php 数组 函数 用回调函数比较键名来计算数组的交集php 数组 函数 计算数组的交集php 数组 函数 带索引检查计算数组的差集,用回调函数比较数据php 数组 函数 带索引检查计算数组的差集,用回调函数比较数据和索引php 数组 函数 用回调函数比较数据来计算数组的差集php 数组 函数 带索引检查计算数组的交集,用回调函数比较数据php 数组 函数 带索引检查计算数组的交集,用单独的回调函数比较数据和索引php 数组 函数 计算数组的交集,用回调函数比较数据php 函数处理 函数 调用回调函数,并把一个数组参数作为回调函数的参数php fann 函数 在获取基于先前计算的参数之后,在输出向量中缩小数据php fann 函数 基于先前计算的参数来缩小输入和输出数据php fann 函数 根据训练数据计算将来使用的输入比例参数php fann 函数 根据训练数据计算输入和输出缩放参数以供将来使用php 数组 函数 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联
关注编程学问公众号