Php 数组_在foreach循环中相交

Php 数组_在foreach循环中相交,php,sql,array-intersect,Php,Sql,Array Intersect,这是我第一次在这里发帖,尽管我在这里读到了很多很棒的技巧和技巧 我的目标是: 我有两个类似的表格要比较。对于每一个表的每一行,我将把我想要的字段拉入一个数组 我基本上希望从一个表中回传出任何数组的值,该表在另一个数组中有匹配的值 这是我的代码,也许会更容易理解 $sql = "SELECT * FROM $i_comp ORDER BY `manufacturer`"; $statement = $objDb->query($sql); $c_skus = $statement->f

这是我第一次在这里发帖,尽管我在这里读到了很多很棒的技巧和技巧

我的目标是:

我有两个类似的表格要比较。对于每一个表的每一行,我将把我想要的字段拉入一个数组

我基本上希望从一个表中回传出任何数组的值,该表在另一个数组中有匹配的值

这是我的代码,也许会更容易理解

$sql = "SELECT * FROM $i_comp ORDER BY `manufacturer`";
$statement = $objDb->query($sql);
$c_skus = $statement->fetchAll(PDO::FETCH_ASSOC);

$sql = "SELECT `sku_one`,`sku_two`,`qty`,`manufacturer`";
$sql .= "FROM $i_gas ORDER BY `manufacturer`";
$statement = $objDb->query($sql);
$d_skus = $statement->fetchAll(PDO::FETCH_ASSOC);

foreach ( $c_skus as $c_sku ) {
    // i want to see if any values of this array exist in the array created hy
    // the foreach loop below (yes, repeat for each row)
    $c = array($c_sku['sku'],$c_sku['sku_one'],$c_sku['sku_two'],$c_sku['sku_three']);
    foreach ( $d_skus as $d_sku ) {
        $d = array($d_sku['sku_one'],$d_sku['sku_two']);
        $intersect = array_intersect($c, $d);
        echo '<pre>', print_r($intersect), '</pre>';
    }
}
还应该注意的是,我不关心键,只关心值。最终,这些值将被写入INSERT语句,但目前我只需要得到正确的结果


无论如何,谢谢你的帮助

这通常在SQL中完成

如果要在另一个表中包含至少1个匹配SKU的整行:

$sql=”
从$i_comp中选择c.*作为c
加入$i_gas作为d
d.sku一英寸(c.sku,c.sku一,c.sku二,c.sku三)
或d.sku二英寸(c.sku,c.sku一,c.sku二,c.sku三)
由c.‘制造商’订购;
$statement=$objDb->query($sql);
$c_SKU=$statement->fetchAll(PDO::FETCH_ASSOC);
//其他表上至少有1个匹配sku的所有行
印刷品(c_SKU);
如果你只想要SKU

$sql=”
从$i_comp中选择d.sku_one作为c
加入$i_gas作为d
d.sku一英寸(c.sku,c.sku一,c.sku二,c.sku三)
联合
从$i_comp中选择d.sku_二作为c
加入$i_gas作为d
或d.sku二英寸(c.sku,c.sku一,c.sku二,c.sku三)
";
$statement=$objDb->query($sql);
$c_SKU=$statement->fetchAll(PDO::FETCH_ASSOC);
//在另一个表上至少有1个匹配sku的所有sku
印刷品(c_SKU);
在PHP intersect变体中,您需要单独构建数组,然后使用
array\u intersect

$c=array();
foreach($c_sku作为$c_sku){
$c[]=$c_sku['sku'];
$c[]=$c_sku['sku one'];
$c[]=$c_sku['sku_two'];
$c[]=$c_sku['sku三'];
}
$d=数组();
foreach($d_sku作为$d_sku){
$d[]=$d_sku['sku_one'];
$d[]=$d_sku['sku_two'];
}
$intersect=数组_intersect($c,$d);
回显“”,打印($intersect),“”;
Array
(
)
1

你是在问如何处理你得到的输出吗?如果我们了解你的逻辑,我确信可以用SQLJOIN语句完成这项任务,除非你需要问题中没有说明的东西。我的目标是:在INSERT语句中使用d.qty。但是,在我进行测试时,我想回显所有匹配行c.sku和d.qty,然后我将手动检查其中一些行,以确保其给出正确的结果。Imre L在下面发布的所有代码起初都工作正常,但现在看来它们运行缓慢。有没有可能我的表没有正确索引?这3个表都做得很好!第一个对我来说是最实际的,因为我已经试过了。所以现在我需要循环这个查询,在大多数情况下,这是最简单的部分。我正在测试的那些可笑的查询确实让数据库感到很吃力,所以我的下一轮测试涉及将所有数据拉入php,并使用array_intersect或相当复杂的if循环(in_array(……)。感谢您的宝贵建议!