【问题标题】:php compare array dataphp比较数组数据
【发布时间】:2016-03-08 06:15:56
【问题描述】:

我有一个 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 中的值

【问题讨论】:

  • 写代码是个好的开始...

标签: php loops associative-array


【解决方案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`)

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

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

【讨论】:

  • 听起来很有希望。我会试试的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多