有没有更快的方法来查找PHP中两个数组之间的匹配项?

时间:2018-07-20 04:57:47

标签: 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'])
            array_push($temparray, $resultrow);
    }

    $itemArray[$i][$columnname] = $temparray;
}

有人可以推荐一种更快的方法吗?每次都要遍历循环中的每个项目,这会降低我的PHP页面执行速度。

1 个答案:

答案 0 :(得分:0)

您应该将$query3array组织为 associative 数组(而不是普通的索引数组),并以custom_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']]);
    }
}

这将以线性时间复杂度(即使包括转换在内)运行,而不是二次时间。