我已经有一个PHP脚本来上传CSV文件:它是一个与Twitter帐户(又名品牌)相关的推文集合。顺便说一句,谢谢T.A.G.S:)
我还有一个脚本来解析这个CSV文件:我需要提取表情符号,主题标签,链接,转发,提及以及我需要为每条推文计算的更多详细信息(我的研究项目是:数字情感。我已经存储了280k条推文,里面有170k表情符号。
然后将每条推文及其指标保存在数据库(表格TWEETS),以及表情符号(表格EMOJIS)以及帐户统计数据(表格品牌)中。
我使用的类非常类似于此:CsvImporter> https://gist.github.com/Tazeg/b1db2c634651c574e0f8。我做了一个循环,用1解析每一行。
try {
mediaPlayer.setDataSource(MainActivity.this, uri);
mediaPlayer.prepare();
mediaPlayer.start();
} catch (IOException e) {
dialog.dismiss();
}
...
完成所有我的计算后,我$importer = new CsvImporter($uploadfile,true);
while($content = $importer->get(1)) {
$pack = $content[0];
$data = array();
foreach($pack as $key=>$value) {
$data[]= $value;
}
$id_str = $data[0];
$from_user = $data[1];
,与"INSERT INTO TWEETS VALUES(...)"
相同。之后,我必须做一些其他的操作
所有这些操作都在一个文件insert.php中编写脚本,并在我提交上传表单时触发。 但如果推文太多,一切都会失败。我的服务器无法处理这么长的操作。
所以我想知道我是否可以调整部分过程,特别是循环
我对EMOJIS
的了解不够,但我想与beforeSend,success,complete和所有Ajax事件有关。或许我完全错了!?
有没有人可以帮助我?
答案 0 :(得分:0)
据我所知,您可以大大减轻服务器上的负担,因为$pack
已经是一个值数组,并且不需要执行key value
循环。
您还可以更惯用地编写CSV行中的值映射。除非您知道CSV文件可能很大,否则您还应该执行多行
$importer = new CsvImporter($uploadfile, true);
// get as many lines as possible at once...
while ($content = $importer->get()) {
// this loop works whether you get 1 row or many...
foreach ($content as $pack) {
list($id_str, $from_user, ...) = $pack;
// rest of your line processing and SQL inserts here....
}
}
您也可以继续这样做,并在单个INSERT
语句中将多行插入数据库,大多数SQL数据库都支持该语句。
答案 1 :(得分:0)
$f = fopen($filepath, "r");
while (($line = fgetcsv($f, 10000, ",")) !== false) {
array_push($entries, $line);
}
fclose($f);
试试这个,它可能会有所帮助。