为啥 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?为啥不直接更改渲染坐标?