PHP从CSV获取随机行而没有循环

时间:2016-01-18 23:30:52

标签: php csv random

我有多个大型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文件太大而且我的脚本每次都冻结。

谢谢!

2 个答案:

答案 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)

这是不可能的。你可以读取文件到数组并从数组中获取一个随机单元格(它需要更多的计算机资源,不适合大文件),或者你可以生成随机数,并在读取所需的行后使用循环和中断进入该行。