在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'])

我的PHP代码通过两个循环找到匹配项:

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手册