V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xoxo419
V2EX  ›  PHP

PHP 数组练习#4#array_intersect_uassoc 疑问

  •  
  •   xoxo419 · 2018-08-09 11:03:28 +08:00 · 1613 次点击
    这是一个创建于 2297 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • array_intersect_assoc 带索引检查计算数组的差集##对比数组中有键和值都一样的元素
    • array_intersect_key 用键名比较计算数组的交集##返回键值一样的元素, 是 array1 中的
    • array_intersect_uassoc 带索引计算数组的交集, 用回调函数比较索引##回调函数返回 0 为交集
    • array_intersect_ukey 用回调函数比较建名来计算数组的交集##回调函数返回 0 时认为元素交集
    • array_interscet 计算数组交集, 键名保留不变##以 array1 为主值其他数组出现 array1 的值则为交集元素

    手册例子如下, array_intersect_uassoc 回调函数返回 0 则为交集元素, 那么下面 "a" => "green" 和 "a" => "GREEN" 不是交集?

    $array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
    $array2 = array("a" => "GREEN", "B" => "brown", "yellow", "red");
    
    // print_r(array_intersect_uassoc($array1, $array2, "strcasecmp")); // "a" => "green" 为什么不输出?
    

    数组练习代码及 docker 环境

    3 条回复    2018-08-09 13:45:24 +08:00
    airdge
        1
    airdge  
       2018-08-09 11:24:06 +08:00   ❤️ 1
    这个函数只使用自定义函数比较键名,不比较键值,所以只输出 b=>brown
    Light3
        2
    Light3  
       2018-08-09 11:58:55 +08:00   ❤️ 1
    xoxo419
        3
    xoxo419  
    OP
       2018-08-09 13:45:24 +08:00
    @airdge #1 又重新测试了下, 使用自定义函数接收的键值比较. 系统函数 strcasecmp 会比较键和值, 键不区分大小写, 值会区分大小.
    @Light3 #2 重新再看了手册

    手册中: 该数组包含了所有在 array1 中也同时出现在所有其它参数数组中的值。注意和 array_intersect() 不同的是(array_intersect_uassoc)键名也用于比较。

    自己理解反了 -_-!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4373 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 10:06 · PVG 18:06 · LAX 02:06 · JFK 05:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.