php比较数组数据

时间:2015-12-03 15:03:34

标签: php loops associative-array

我有一个CSV文件,我循环获取一个如下所示的数组od数据:

    $data[0]['StockNumber']

此数组为400个不同的行。 我需要将这些值与我的数据库进行比较并执行3操作。

从我的数据库中选择数据并作为对象返回。

如果我的数据库中存在$ data [0] ['stockNumber'],我想更新我的数据库。 如果$ data [0] ['stockNumber']不存在,我想添加到我的数据库。

之后,如果我的数据库中存在库存号但我的CSV中没有库存号,我想从我的数据库中删除。

我该如何循环呢?

这是我正在使用的代码

        function ImportCSV2Array($filename)
{
    $row = 0;
    $col = 0;

    $handle = @fopen($filename, "r");
    if ($handle) 
    {
        while (($row = fgetcsv($handle, 4096,'|','"')) !== false) 
        {
            if (empty($fields)) 
            {
            $fields = $row;
            continue;
        }

             foreach ($row as $k=>$value) 
            {
            $results[$col][$fields[$k]] = $value;
        }
            $col++;
                unset($row);
        }
        if (!feof($handle)) 
        {
            echo "Error: unexpected fgets() failn";
        }
        fclose($handle);
    }

    return $results;
}

$csvArray = ImportCSV2Array($filename);
print_r($csvArray[4]['StockNumber']);

"SELECT StockNumber FROM my_table"
$result = $conn->query($sql);

现在,我如何检查$ result中的所有价值与$ results

中的值

1 个答案:

答案 0 :(得分:1)

IMO您解决此任务的方法是错误的。

以下是我将如何做到这一点。

1-在mysql中创建临时表,解析CSV文件&将文件数据添加到临时表中。

2-如果原始表中存在ID,则运行单个查询更新数量或其他任何内容。

update `original_table` `ot` set `ot`.quantity = `t`.`quantity` 
inner join temp_table `t` on ot.id = t.id 

3-运行单个查询,删除临时表中不存在的产品

delete from `original_table` WHERE `id` NOT IN(SELECT `id` FROM `temp_table`)

4-运行单个查询,添加临时表中但不在原始表中的产品。

eg: INSERT INTO `original_table` (`id`, `name` ...) SELECT `id`, `name` ... FROM `temp_table` WHERE `temp_table`.`id` NOT IN(SELECT `id` FROM `original_table`)

这种方法整个过程需要几秒钟。

当然,这只是一个例子,首先尝试使用本地数据,看看在投入生产之前一切正常。