我有多个大型CSV文件,超过100万行。我不能改变它。
我需要循环,获取随机CSV文件的随机行并输出此行。
现在我有:
for ($i=0; $i < 50; $i++) {
$randomFile = $files[array_rand($files)];
if (($handle = fopen($randomFile, "r")) !== FALSE) {
//HERE I NEED TO GET A RANDOM LINE OF $handle FILE
}
}
我怎样才能得到我的CSV $handle
的随机行,没有循环,就像我到处看到的所有解决方案一样?
我已经尝试过循环解决方案,但我的CSv文件太大而且我的脚本每次都冻结。
谢谢!
答案 0 :(得分:0)
这解决了问题吗?
<?php
for ($i=0; $i < 50; $i++) {
$randomFile = $files[array_rand($files)];
if (($handle = fopen($randomFile, "r")) !== FALSE) {
$randomLineIndex = array_rand($data = fgetcsv($handle, filesize($randomFile), ","));
print_r($data[$randomLineIndex]);
exit;
}
}
更新的答案:
根据@ Robbie的评论部分中的答案将会有更好的表现。
<?php
for ($i=0; $i < 50; $i++) {
$randomFile = $files[array_rand($files)];
$randomLineIndex = array_rand(file($randomFile));
print_r($data[$randomLineIndex]);
}
答案 1 :(得分:-1)
这是不可能的。你可以读取文件到数组并从数组中获取一个随机单元格(它需要更多的计算机资源,不适合大文件),或者你可以生成随机数,并在读取所需的行后使用循环和中断进入该行。