我们从我们的供应商那里获得了一个由ftp提供给我们网站的产品清单。我需要创建一个脚本,搜索该文件(制表符分隔)以查找与我们相关的产品,并使用该信息更新库存水平,价格等。
文件本身就像38,000行一样,我想知道最好的处理方式。
我最初想到的唯一方法是使用fopen
和fgetcsv
,然后在每一行中循环。将该行放入数组并查找相关的产品代码。
我希望有一种更有效的方法(虽然我还没有测试过它的效率)
我要读的文件是8.8 Mb。 所有这些都需要自动完成,例如CRON每天都会这样做。
编辑 - 更多信息。
我已经进行了第一次试用,基于2个答案,我有以下代码:
我需要从$items[$row['item_id']] = $row['prod_code'];
$catalogue = file('catalogue.txt');
while ($line = $catalogue)
{
$prod = explode(" ",$line);
if (in_array($prod[0],$items))
{
echo $prod[0]."<br>";//will be updating the stock level in the db eventually
}
}
虽然目前没有提供正确的输出
答案 0 :(得分:0)
我曾经在日常数据(英国所有)中使用Dominos Pizza做类似的事情。
一次性将所有内容加载到数据库中。
OR
使用fopen并一次将一行加载到数据库中,从而降低内存开销。 (我不得不使用这种方法,因为数据格式不是很好)
然后,您可以随意查询数据库。
答案 1 :(得分:0)
你是什么意思?我希望有一种更有效的方式«?对什么有效?写代码?执行代码时的CPU消耗?磁盘I / O?内存消耗?
在内存中保存~9MB的文本不是问题(除非你的内存限制非常低)。 file()调用将读取整个文件并返回一个数组(按行分割)。对于磁盘I / O,这个或file_get_contents()将是最有效的方法,但消耗的内存比必要的多得多。
将该行放入数组并查找相关的产品代码。
我不确定为什么你需要在数组中缓存该文件的内容。但如果你这样做,请记住,数组将使用比~9MB文本稍多的内存。因此,您可能希望按顺序读取文件,以避免在内存中使用相同的数据两次。
根据您对数据的处理方式,将其加载到数据库中也可能是一个可行的解决方案,正如@ user1487944已经指出的那样。