drwghu6386 2015-03-03 13:35
浏览 5
已采纳

csv到php读取整个目录[关闭]

Is there a way to make use of this script? but instead of 1 file it reads an entire directory? and then shows it on a webpage? at the moment it only shows 1 csv file. I dont know if I can use glob for this. my php knowledge is improving but I still terrible at this. XD

<?PHP  

$file_handle = fopen("../test.csv", "r");  

while (!feof($file_handle) ) {  

$line_of_text = fgetcsv($file_handle, 1024);  

                echo '<tr><td>' . $line_of_text[0] . '</td><td>' . $line_of_text[1] . '</td><td>' . $line_of_text[2] . '</td><td>' . $line_of_text[3] . '</td><td>' . $line_of_text[4] . '</td></tr>'; 

                }  

fclose($file_handle);  

?> 
  • 写回答

1条回答 默认 最新

  • dsoxcj7276 2015-03-03 13:59
    关注

    Yes, you can use glob to fetch a list of files in your directory, then loop through them with foreach() and use your existing code.

    <?php
    
    $arrFiles = glob("../*.csv");
    foreach($arrFiles as $strFileName) {
       $file_handle = fopen($strFileName, "r");  
       while (!feof($file_handle) ) {  
          $line_of_text = fgetcsv($file_handle, 1024);  
          echo '<tr><td>' . $line_of_text[0] . '</td><td>' . $line_of_text[1] . '</td><td>' . $line_of_text[2] . '</td><td>' . $line_of_text[3] . '</td><td>' . $line_of_text[4] . '</td></tr>'; 
       }  
       fclose($file_handle);  
    }
    

    You might want to limit the amount of files you open and close rather than opening all files in that directory - or cache the results.

    To limit the amount of files you open, you can use array_slice;

    $arrFiles = glob("../*.csv");
    $arrFiles = array_slice($arrFiles, 0, 10); //Limit to 10 files
    

    Sorting output based on date modified

    What you need to do is grab a list of files, then get their last modified time, then sort that array. For example:

    $arrFiles = glob("../*.csv");
    $arrSortedFiles = array();
    foreach($arrFiles as $strFileName) {
       $arrSortedFiles[$strFileName] = filemtime($strFileName);
    }
    natsort($arrSortedFiles); //Sort naturally. Oldest first. 
    foreach(array_keys($arrSortedFiles) as $strFileName) {
         //...
    } 
    

    If, however, you want the sort the other way around - newest first - then just use array_reverse().

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊
  • ¥15 TLS1.2协议通信解密
  • ¥40 图书信息管理系统程序编写
  • ¥20 Qcustomplot缩小曲线形状问题
  • ¥15 企业资源规划ERP沙盘模拟