我有这样的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页面执行速度。
答案 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']]);
}
}
这将以线性时间复杂度(即使包括转换在内)运行,而不是二次时间。