在PHP中有没有更快的方法来查找两个数组之间的匹配?
我的PHP代码通过两个循环找到匹配项:在PHP中有没有更快的方法来查找两个数组之间的匹配?,php,arrays,loops,Php,Arrays,Loops,我的PHP代码通过两个循环找到匹配项: for ($i = 0; $i <= count($itemArray) - 1; $i++) { $item = $itemArray[$i]; $temparray = array(); foreach ($query3array as $resultrow) { if ($resultrow['custom_id'] == $item['id'])
for ($i = 0; $i <= count($itemArray) - 1; $i++)
{
$item = $itemArray[$i];
$temparray = array();
foreach ($query3array as $resultrow)
{
if ($resultrow['custom_id'] == $item['id'])
array_push($temparray, $resultrow);
}
$itemArray[$i][$columnname] = $temparray;
}
对于($i=0;$i您应该将$query3array
组织为关联数组(而不是普通索引数组),由自定义\u id
值设置关键字。这样您就可以直接访问由特定id设置关键字的行
首先将其转换为一个关联数组——我在这里称之为$hash
$hash = [];
foreach ($query3array as $resultrow) {
$hash[$resultrow['custom_id']] = $resultrow;
}
也许你应该重新设计你的代码,让它从一开始就产生这样一个关联数组。目的不是回到你的索引版本:忘掉它
然后只需要一个循环:
foreach($itemArray as $i => $item) {
if (isset($hash[$item['id']])) {
$itemArray[$i][$columnname][] = $resultrow;
unset($hash[$item['id']]);
}
}
这将以线性时间复杂度(即使包括转换)而不是二次时间复杂度运行。您应该使用in_数组函数:要消除循环,请使用array_intersect函数:查看array_intersect手册