PHP数组比较错误

时间:2018-03-08 05:24:40

标签: php arrays associative-array

我的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()的唯一行。

4 个答案:

答案 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);

DEMO

答案 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 );