为什么array_intersect_uassoc()比较同一个数组中的数组键?

时间:2014-01-09 21:11:20

标签: php arrays

以下是使用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, function($a, $b) {
    print_r("$a -- $b");
    return 0;
  });

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

这究竟是什么意思呢?

1 个答案:

答案 0 :(得分:0)

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

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;
}

这可以帮助您看到键不是唯一检查的键,但更重要的是值。