Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何比较从数据库检索的两个数据数组?_Php_Sql_Mysqli - Fatal编程技术网

Php 如何比较从数据库检索的两个数据数组?

Php 如何比较从数据库检索的两个数据数组?,php,sql,mysqli,Php,Sql,Mysqli,我有两个数组。在一个数组中,我存储来自一个表的数据。我将来自另一个表的数据存储在另一个数组中。我想比较两个数组中的数据。如果第一个数组的数据在第二个数组中,我想继续。我怎样才能做到这一点 我尝试了以下代码,但它不起作用,尽管array1号存在于array2中: $x = "SELECT * FROM table1"; $data1 = mysqli_query($link, $x); $dat1 = array() while($row1= mysqli_fetch_array($data,MY

我有两个数组。在一个数组中,我存储来自一个表的数据。我将来自另一个表的数据存储在另一个数组中。我想比较两个数组中的数据。如果第一个数组的数据在第二个数组中,我想继续。我怎样才能做到这一点

我尝试了以下代码,但它不起作用,尽管array1号存在于array2中:

$x = "SELECT * FROM table1";
$data1 = mysqli_query($link, $x);
$dat1 = array()
while($row1= mysqli_fetch_array($data,MYSQLI_ASSOC))
{
  $dat1[] = $row1;
  $f1 = $row1['fid'];
}

$y = "SELECT * FROM table2";
$data2 = mysqli_query($link, $y);
$dat2 = array()
while($row2= mysqli_fetch_array($data2,MYSQLI_ASSOC))
{
  $dat2[] = $row2;
  $f2 = $row2['fid'];
}

if(in_array($dat1,$dat2))
{
  // if exists proceed
}
else
{
  // if not show error
}

根据你最后的评论,你的代码逻辑是错误的。您当前正在从mysql返回中将所有行拉入$dat1变量,因此无法通过将整个数组用作单个值来检查第二个数组中是否存在特定值。您还在while循环的每次迭代中覆盖$f1

您可以对从第一个数组返回的每个ID进行如下检查

$x = "SELECT * FROM table1";
$data1 = mysqli_query($link, $x);
$dat1 = array()
while($row1= mysqli_fetch_array($data,MYSQLI_ASSOC))
{
  $dat1[] = $row1;
  $f1 = $row1['fid'];
  $y = "SELECT * FROM table2 where fid = ".$f1;
  $data2 = mysqli_query($link, $y);
  $dat2 = array();
  while($row2= mysqli_fetch_array($data2,MYSQLI_ASSOC))
  {
    //data exists in table2
  }
}
为什么把$data放在这里?应该是$dat1否?

您可以这样使用

 $bool=0;
 foreach ($dat1 as $a) {
    foreach ($dat2 as $b) {
        if($a==$b)
        {
            $bool=1;
            break;
        }
        else
        {
            $bool=0;
        }
    }
    if($bool==1)
    {
        break;
    }
 }
 if($bool==1)
 {
   //proceed
  }
 else
  {
     //error
   }

这里,如果dat2中的任何一个值出现在dat1中,那么它将为true,您可以继续操作。

这可以通过SQL完成

检查表1中的所有FID是否在表2中:

SELECT COUNT(a.fid) FROM table1 AS a WHERE a.fid IN (SELECT b.fid FROM table2 AS b)

SELECT COUNT(*) FROM table1

如果这两个值相等,那么表1中的所有FID都在表2中。

正如sotirojo刚刚指出的那样,当您可以在数据库中进行数据处理时,不要尝试在PHP中进行数据处理
因此,在我看来,任何告诉您如何在PHP中解决问题的答案都是错误的

SELECT table_1.* 
   FROM table_1
   JOIN table_2 USING(fid)
将返回表_1中存在的所有行作为表_2

SELECT table_1.* 
   FROM table_1
   LEFT JOIN table_2 USING(fid)
WHERE table_2.fid IS NULL
将返回表_1中不在表_2中的所有行

等等


使用数据库处理数据

抛开sql部分,使用以下函数:

function compare_array($arr1,$arr2)
{
    foreach($element as $arr1)
    {    
        foreach($element2 as $arr2)
        {
            if($element2 == $element)
            {
               return true;
            }
            else
            {

            }
        }
 return false;
}
将查询获得的两个数组传递给它,并在返回时执行操作
它可能有点重,但如果我很好地理解您需要什么,它应该可以根据:SQL for Dummies运行,内部联接将丢弃结果表中两个源表中没有对应行的所有行

尝试:


请提供一个正面和负面的例子。请注意,您在代码中将
$dat2
拼错为
$dta2
。Asker,
if(in_array($data,$dta2))
中的
$dta2
是一个拼写错误吗?这只是一个拼写错误……当我检查
如果(至少一个data2与data1匹配)//procesed}else时,让data1=1、2、3和data2=1{//show error}
@Thauwa肯定是打字错误。我已修复。可能是no的重复项。它们不完全相同,只是想检查$dat1是否存在$dat2
function compare_array($arr1,$arr2)
{
    foreach($element as $arr1)
    {    
        foreach($element2 as $arr2)
        {
            if($element2 == $element)
            {
               return true;
            }
            else
            {

            }
        }
 return false;
}
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;