【发布时间】:2017-03-10 09:25:10
【问题描述】:
测试脚本
$i = 0;
array_uintersect(['foo', 'bar'], ['baz', 'qux'], function($a, $b) use (&$i) {
print_r([$a, $b, $i++]);
});
实际结果
Array
(
[0] => bar
[1] => foo
[2] => 0
)
Array
(
[0] => qux
[1] => baz
[2] => 1
)
Array
(
[0] => bar
[1] => qux
[2] => 2
)
Array
(
[0] => bar
[1] => foo
[2] => 3
)
预期结果
Array
(
[0] => foo
[1] => baz
[2] => 0
)
Array
(
[0] => bar
[1] => qux
[2] => 1
)
换句话说,我期望传递给回调的是左数组的当前元素和右数组的当前元素。
此外,如果我要向array_uintersect 传递一个额外的数组,我希望同样的逻辑也适用——再向回调传递一个参数(例如$c)。
有人可以解释这种行为吗?
【问题讨论】:
-
我不明白你在这里使用
$i。来自文档:“如果第一个参数分别被认为小于、等于或大于第二个参数,则比较函数必须返回一个小于、等于或大于零的整数。” -
@mistermartin 我将它用于调试目的;一种跟踪迭代发生次数的方法。
-
为什么不直接遍历第一个数组并使用相同的索引从第二个数组中获取值?
-
@SanderVisser 当然可以,但我想使用这个功能,以便将来接手我工作的任何开发人员立即知道发生了什么。交点是不言自明的。
-
是的,但是
array_uintersect试图与值相交而不是键 php.net/manual/en/function.array-intersect-key.php
标签: php arrays set-intersection array-intersect