为啥 array_intersect_uassoc() 比较同一数组中的数组键?

Posted

技术标签:

【中文标题】为啥 array_intersect_uassoc() 比较同一数组中的数组键?【英文标题】:why does array_intersect_uassoc() compare array keys within the same array?为什么 array_intersect_uassoc() 比较同一数组中的数组键? 【发布时间】:2014-01-28 15:40:35 【问题描述】:

这是一个使用 array_intersect_uassoc() 的示例。

我故意将键设置为不同的,这样你就可以分辨出哪个来自哪个数组。

$array1 = array("LEFT a" => "green", "LEFT b" => "brown", "LEFT c" => "blue"); $array2 = array("RIGHT a" => "GREEN", "RIGHT B" => "brown", 'RIGHT y' => "yellow"); array_intersect_uassoc($array1, $array2, 函数($a, $b) print_r("$a -- $b"); 返回0; );

在输出中,我看到了两个 LEFT 键和两个 RIGHT 键的比较。

这样做到底有什么意义?

【问题讨论】:

因为如果LEFT a == LEFT b,您只需要检查== RIGHT a是否其中之一,而不是两者。节省时间/是为了效率。现在有点,但在更大的阵列上,这可以加起来。 但它们是数组键,因此根据定义,一个数组中的任何键都不能相等。它们是 无关紧要,因为我们不是在排序,而是在过滤。 【参考方案1】:

查看函数的逻辑代码(我简化了一点):

function array_intersect_uassoc($args, compare_func) 

    $result = array();
    $array_count = count($args);
    foreach ($args[0] as $k => $v) 
        for ($i = 0; $i < $array_count; $i++) 
            $match = false;
            foreach ($args[$i] as $kk => $vv) 
                $compare = call_user_func_array($compare_func, array($k, $kk));
                if ($compare === 0 && $v == $vv) 
                    $match = true;
                    continue 2;
                
            
            if ($match === false) 
                continue 2;
            
        

        if ($match === true) 
            $result[$k] = $v;
        
    
    return $result;

这有助于您了解检查的不只是键,更重要的是检查值。

【讨论】:

以上是关于为啥 array_intersect_uassoc() 比较同一数组中的数组键?的主要内容,如果未能解决你的问题,请参考以下文章

array_intersect_uassoc — 带索引检查计算数组的交集,用回调函数比较索引

你应该同步运行方法吗?为啥或者为啥不?

为啥使用 glTranslatef?为啥不直接更改渲染坐标?

为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?

为啥需要softmax函数?为啥不简单归一化?

为啥 g++ 需要 libstdc++.a?为啥不是默认值?