zoukankan      html  css  js  c++  java
  • php array_udiff_uassoc比较数组的键值与值

    php array_udiff_uassoc 用于带索引检查计算数组的差集,用回调函数比较数据和索引。本文章通过实例向大家介绍array_udiff_uassoc函数的使用方法。需要的码农可以参考一下。

    定义和用法

    array_udiff_uassoc() 函数用于比较两个(或更多个)数组的键名和键值,并返回差集。

    注释:该函数使用两个用户自定义函数进行比较;第一个函数比较键名,第二个函数比较键值!

    该函数比较两个(或更多个)数组的键名和键值,并返回一个差集数组,该数组包括了所有在被比较的数组(array1)中,但是不在任何其他参数数组(array2 或 array3 等等)中的键名和键值。

    说明

    array_udiff_uassoc() 函数返回 array1 数组中存在但其它数组中都不存在的部分。返回的数组中键名保持不变。

    注意与 array_diff() 以及 array_udiff() 不同的是键名也用于比较。同时进行键名和键值的比较,如 "a"=>1 和 "b"=>1 这两个元素是不相等的。

    对键名(索引)的检查也是由回调函数 myfunction_key 进行的。这和 array_udiff_assoc() 的行为不同,后者是用内部函数比较索引的。

    数组数据的比较是使用用户提供的回调函数 myfunction_value 进行的。在此方面和 array_diff_assoc() 的行为正好相反,后者是用内部函数进行比较的。

    这两个函数都带有两个将进行比较的参数。如果第一个参数小于第二个参数,则函数返回一个负数,如果两个参数相等,则要返回 0,如果第一个参数大于第二个,则返回一个正数。

    语法

    array_udiff_uassoc(array1,array2,array3...,myfunction_key,myfunction_value)
    参数描述
    array1 必需。与其他数组进行比较的第一个数组。
    array2 必需。与第一个数组进行比较的数组。
    array3,... 可选。与第一个数组进行比较的其他数组。
    myfunction_key

    必需。用于比较数组键名的用户自定义函数的名称。

    字符串值,定义可调用的比较函数。如果第一个参数小于等于或大于第二个参数,则比较函数必须返回小于等于或大于 0 的整数。

    myfunction_value

    必需。用于比较数组键值的用户自定义函数的名称。

    字符串值,定义可调用的比较函数。如果第一个参数小于等于或大于第二个参数,则比较函数必须返回小于等于或大于 0 的整数。

    返回值:

    返回差集数组,该数组包括了所有在被比较的数组(array1)中,但是不在任何其他参数数组(array2或 array3 等等)中的键名和键值。

    实例:

    <?php
    
    class cr {
        private $priv_member;
        function cr($val) {
            $this->priv_member = $val;
        }
        static function comp_func_cr($a, $b) {
            if ($a->priv_member === $b->priv_member) return 0;
            return ($a->priv_member > $b->priv_member) ? 1 : -1;
        }
        static function comp_func_key($a, $b) {
            if ($a === $b) return 0;
            return ($a > $b) ? 1 : -1;
        }
    }
    $a = array(
        "0.1" => new cr(9) ,
        "0.5" => new cr(12) ,
        0 => new cr(23) ,
        1 => new cr(4) ,
        2 => new cr(-15) ,
    );
    $b = array(
        "0.2" => new cr(9) ,
        "0.5" => new cr(22) ,
        0 => new cr(3) ,
        1 => new cr(4) ,
        2 => new cr(-15) ,
    );
    $result = array_udiff_uassoc($a, $b, array(
        "cr",
        "comp_func_cr"
    ) , array(
        "cr",
        "comp_func_key"
    ));
    print_r($result);
    ?> 
    

    在线运行

    运行结果:

    Array
    (
        [0.1] => cr Object
            (
                [priv_member:private] => 9
            )
    
        [0.5] => cr Object
            (
                [priv_member:private] => 12
            )
    
        [0] => cr Object
            (
                [priv_member:private] => 23
            )
    )
    

    在上例中键值对 "1" => new cr(4) 同时出现在两个数组中,因此不在本函数的输出中。要记住必须提供两个回调函数。

  • 相关阅读:
    数字基本数据类型范围比较
    java中float和double的区别
    ASP.NET中javascript与c#互相访问
    Javascript技术之详尽解析event对象
    Java基础-Java中的Calendar和Date类
    逻辑运算符
    JS获取当前时间
    几秒后刷新页面
    【LiteOS】LiteOS任务篇源码分析删除任务函数
    POJ 2385 Apple Catching (DP)
  • 原文地址:https://www.cnblogs.com/bjfy/p/5706877.html
Copyright © 2011-2022 走看看