array_udiff意外地表现

时间:2014-07-10 13:58:33

标签: php arrays linq

我使用PHP并拥有一对关联数组,如下所示:

{foo: [{id: 1, title: "one"}, {id: 2, title: "two"}]}
{bar: [{id: 2, title: "DEUX"}, {id: 3, title: "TROIS"}]}

我想从第一个数组中排除其ID出现在第二个数组中的任何项目,因此在理智的语言中可能表示为:

foo = foo.Where(x => !bar.Any(y => x.ID == y.ID));

PHP手册似乎指向array_udiff作为此作业的工具,因此我可以使用:

array_udiff($foo, $bar, function($x, $y) { ... });

使用一些合适的功能将$ x [' id']与$ y [' id']进行比较。

我期望用每个可能的$ x和$ y对调用函数,即function($x, $y) { print $x['title'] . ", " . $y['title']; return 0;}输出类似的东西:

  • 一,DEUX
  • one,TROIS
  • 二,DEUX
  • 二,TROIS

$ x总是来自第一个数组的值,$ y来自第二个数组。

实际传入的内容是每个数组的完整混合值,这对我来说毫无意义,例如。

  • 两个,一个
  • TROIS,DEUX
  • 二,TROIS
  • 两个,一个

任何人都可以解释一下发生了什么吗?

产生上述输出的完整代码:

$foo[] = array('id' => 1, 'title' => 'one');
$foo[] = array('id' => 2, 'title' => 'two');
$bar[] = array('id' => 2, 'title' => 'DEUX');
$bar[] = array('id' => 3, 'title' => 'TROIS');
array_udiff($foo, $bar, function($x, $y) { print $x['title'] . ", " . $y['title'] . "\n"; return 0;});

感谢。

0 个答案:

没有答案