我有两个数组。在一个数组中,我存储来自一个表的数据。我将另一个表中的数据存储在另一个数组中。我想比较两个数组的数据。如果第一个数组的数据在第二个数组中,我想继续。我该怎么做呢?
我尝试了下面的代码,但它不工作的事件,虽然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
}
这可以由SQL完成。
检查table1中的所有字段是否都在table2中:
SELECT COUNT(a.fid) FROM table1 AS a WHERE a.fid IN (SELECT b.fid FROM table2 AS b)
SELECT COUNT(*) FROM table1
如果这两个值相等,那么table1中的所有字段都在table2中
if(in_array($data,$dat2))
{
//if exists proceed
}
else
{
//if not show error
}
为什么把$data放在这里?
可以这样使用
$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中,那么它将为真,然后可以继续。
根据你最后的评论,你的逻辑在你的代码中是错误的。您目前正在从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
}
}
正如sotirojo刚才指出的那样,如果可以在数据库中处理数据,就不要尝试在PHP中处理数据!
因此,在我看来,任何告诉你如何在PHP中解决问题的答案都是错误的。
SELECT table_1.*
FROM table_1
JOIN table_2 USING(fid)
将返回table_1中存在的所有行作为table_2
SELECT table_1.*
FROM table_1
LEFT JOIN table_2 USING(fid)
WHERE table_2.fid IS NULL
将返回table_1中不在table_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, INNER JOIN会丢弃结果表中所有在两个源表中没有对应行的行。
试题:
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;