【发布时间】:2016-09-08 05:29:43
【问题描述】:
我有以下两个多维数组:
第一个数组:
$array_1_data = Array (
[0] => Array ( [id] => 1 [name] => IT [slug] => it )
[1] => Array ( [id] => 2 [name] => Accounting [slug] => accounting )
)
第二个数组:
$array_2_data = Array (
[0] => Array ( [cid] => 3 [jid] => 24061 )
[1] => Array ( [cid] => 1 [jid] => 24062 )
)
预期结果:
$some_array = Array (
[0] => Array ( [id] => 1 [name] => IT [slug] => it )
)
我不介意在结果中包含[cid]。
我想通过第一个数组的[id] 和第二个数组的[cid] 将这两个数组相交,就像 MySQL 中的内连接一样。为此,我有基本的foreach 和if else 逻辑,但现在速度是首要任务,所以我正在寻找非循环解决方案。为了更好地理解这里是基本的循环解决方案:
foreach ($array_1_data as $array_1_row ) {
foreach ($array_2_data as $array_2_row ) {
if ($array_2_row['cid'] == $array_1_row['id']) {
//intersection iteration
}
}
}
我试过array_uintersection如下:
array_uintersect($array_1_data, $array_2_data, function($a1, $a2){
$diff1 = strcasecmp($a1['id'], $a2['cid']);
if ($diff1 != 0) return $diff1;
return 0;
});
但它给了我未定义的索引“id”。我检查了这个问题:Comparing two arrays with different key names。这个问题的第一个答案给出了一个我想避免的循环解决方案。第二个答案建议更改 SQL 结构,但我无法控制。所以,
这种情况真的有非循环的快速解决方案吗?
【问题讨论】:
-
你能展示一下预期的结果吗?
-
在
array_uintersect()中,可以使用来自同一数组的元素调用该函数。这就是为什么它会出错,因为它们没有id和cid。 -
您可以将
id元素添加到第二个数组,使其成为cid的副本,然后使用array_uintersect。我认为没有任何内置功能可以满足您的需求。 -
查询数据库时为什么不直接执行join?
-
@Barmar:这些是第三方生成的数组,我没有 SQL 控件。
标签: php arrays multidimensional-array associative-array intersection