我的PHP中有2个SELECT语句。两个select语句都从两个不同的DB中获取数据。获取的数据保存在PDO Assoc Array中。问题是,当我想要比较这两个数组时,如果列'&id'id}'存在于两个数组中或不存在。如果它存在则忽略它。如果它是唯一的ID,则将其保存到第三个数组中。但我在下面的逻辑中发现了一些问题
运行以下代码后,我收到了一些错误: 1:数组到字符串转换 2:重复键值违反唯一约束
$arr1 = $msql->fetchAll(PDO::FETCH_ASSOC);
$array1 = array();
foreach($arr1 as $x){
$array1[] = $x['id'];
}
$arr2 = $psql->fetechAll(PDO::FETCH_ASSOC);
$array2 = array();
foreach($arr2 as $y){
$array2[] = $y['id'];
}
$finalarray = array();
for ($i = 0; $i < count($arr1); $i++){
if(count(array_intersect($array1,$array2)) <= 1){// is the count of id is 1 or less save that whole row in the $finalarray
$finalarray = $arr1[$i]; // saving the unique row.
}
else{
continue;
}
}
我正在尝试在比较它们的id列之后获取数据array()的唯一行。
答案 0 :(得分:1)
您可以使用in_array() function
,因为两个数组都是索引数组。
$finalarray = array();
for ($i = 0; $i < count($arr1); $i++){
if(count(array_intersect($array1,$array2)) <= 1){// is the count of id is 1 or less save that whole row in the $finalarray
$finalarray = $arr1[$i]; // saving the unique row.
}
else{
continue;
}
}
在代码中进行更改:
$finalarray = array();
for ($i = 0; $i < count($arr1); $i++){
if(!in_array($array1[$i], $array2)){
$finalarray[] = $array1[$i]; // saving the unique row.
}
}
答案 1 :(得分:1)
您只需使用array_intersect()
即可获得两个数组之间的公共值。对于差异,可以使用array_diff()
$array1 = [1,2,3,4,5,6,7];
$array2 = [2,4,6];
//array_intersect — Computes the intersection of arrays
$result = array_intersect($array1, $array2);
print_r($result);
//array_diff — Computes the difference of arrays
$result = array_diff($array1, $array2);
print_r($result);
答案 2 :(得分:1)
您可以使用一个数组,而不是使用3个不同的数组来获取唯一ID。如下更改代码:
$finalarray = array();
$arr1 = $msql->fetchAll(PDO::FETCH_ASSOC);
foreach($arr1 as $x){
if (!in_array($x['id'],$finalarray)) { // check id is already stored or not
$finalarray[] = $x['id'];
}
}
$arr2 = $psql->fetechAll(PDO::FETCH_ASSOC);
foreach($arr2 as $y){
if (!in_array($y['id'],$finalarray)) { // check id is already stored or not
$finalarray[] = $y['id'];
}
}
答案 3 :(得分:0)
也许你应该在循环之前确定哪个数组更大;
或使用array_diff:
$finalarray = array_diff($array1 , $array2) ?? [];
$finalarray = array_merge( array_diff($array2 , $array1) ?? [], $finalarray );