我实际上是在尝试比较Array1和Array2,以找到匹配的行。然而,这两个数组都有大约14000行(来自sql表),所以我认为一旦找到数组2中的匹配行,就删除它是合乎逻辑的,以减少总体迭代次数。
它看起来像这样:
foreach($array1 as $arrayRow){
foreach($array2 as $array2Row){
if($arrayRow['ID'] == $array2Row['ID']{
$matchfound = 1;
unset($array2,$array2Row);
}
}
}
然而,在运行上述代码时,似乎什么都没有发生。
注意:数组1和2的数据来自两个独立的数据库,我无法同时对这两个数据库运行查询(因此必须在php中执行此操作)
代码似乎将取消设置$array2本身以及循环中行的本地副本($array2Row)。相反,获取要取消设置的行的密钥,然后直接取消设置条目:
foreach($array1 as $arrayRow){
foreach($array2 as $key => $array2Row){
if($arrayRow['ID'] == $array2Row['ID']{
$matchfound = 1;
unset($array2[$key]);
}
}
}
foreach($array1 as $arrayRow){
foreach($array2 as $array2Row){
if($arrayRow['ID'] == $array2Row['ID']){
$matchfound = 1;
unset($array2,$array2Row);
}
}
}
检查此解决方案以取消设置匹配的数组元素
//Array1 is $array1
//Array2 is $array2
foreach($array1 as $key => $value){
if(in_array($value,$array2)){
unset($array2[$key]);
}
}
如果您需要在不使用SQL的情况下找到匹配的行,只需将结果放在以ID
为键的关联数组中,然后使用array_intersect_key()。
这应该是最快的方法,因为每个数组中有大约14K个条目,所以我选择下面的解决方案:
$array1 = $array2 = array();
//I assume $query1Result and $query2Result are results of sql queries from 2 databases
//put rows in arrays with ID as key
while ($row = mysqli_fetch_assoc($query1Result)) {
$array1[$row['ID']] = $row; // ID is the key in array
}
while ($row = mysqli_fetch_assoc($query2Result)) {
$array2[$row['ID']] = $row; // ID is the key in array
}
//then use this to compute the intersection
$intersected = array_intersect_key($array1, $array2);
您应该使用foreach
函数的php的$key => $value
参数,因此代码如下所示:
$matchFound = 0;
foreach($array1 as $arrKey1 => $arrVal1) {
foreach($array2 as $arrKey2 => $arrVal2) {
if ($array1[$arrKey1]['ID'] == $array2[$arrKey2]['ID']) {
$matchFound = $matchFound + 1;
unset($array2[$arrVal2]);
}
}
}