问答

PHP遍历当前路径下txt文件,随机输出且不重复,直到全部输出完再

作者:admin 2021-09-17 我要评论

?php$files=[];if(count($files)==0) { foreach(glob("./*") as $d) { $tmp=explode('.',$d); $k=end($tmp); if(is_file($d)strcasecmp($k,"txt")==0) { array_p...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)
<?php
$files=[];
if(count($files)==0) {
    foreach(glob("./*") as $d) {
        $tmp=explode('.',$d);
        $k=end($tmp);
        if(is_file($d)&&strcasecmp($k,"txt")==0) {
            array_push($files,$d);
        }
    }
}
$index=array_rand($files,1);
$source=$files[$index];
unset($files[$index]);
header('Location: '.$source);

?>

不是很懂PHP的小白,希望会PHP的大佬能帮忙看看,给点优化建议,谢谢谢谢。。。

###

解决方案:使用Session先记录所有文件,遍历完成移除,即可每次遍历不重复,Cookies也行,很简单。

<?php
ini_set('session.gc_maxlifetime', 600);
session_start();
$files = [];
if (!empty($_SESSION['mytxts'])) {
    $files = $_SESSION['mytxts'];
} else {
    foreach (glob("./*") as $file) {
        $tmp = explode('.', $file);
        $ext = end($tmp);
        if (is_file($file) && strcasecmp($ext, "txt") == 0) {
            $files[] = $file;
        }
    }
    $_SESSION['mytxts'] = $files;
}
$index = array_rand($files, 1);
$source = $files[$index];
unset($files[$index]);
$_SESSION['mytxts'] = $files;
echo $source;
var_dump($_SESSION['mytxts']);
?>
###
<?php

$txtFiles = [];
foreach (glob("*.txt") as $file) {
    $txtFiles[] = $file;
}

var_dump($txtFiles);
  1. 使用 glob() 这个函数的时候,是可以直接指定pattern。那么可以用 "*.txt" 这样的方式,来正则筛选 txt 文件
  2. 将元素加入到数组,我们一般都不使用 array_push 这样的函数操作,都是使用 $txtFiles[] = $file 这样的形式。
  3. 你那个乱序问题,貌似其实不是很重要吧,而且如果要使用乱序,推荐使用 shuffle 函数将数组打乱,然后 foreach 循环挨着输出就行了。

不是很明白你的意图,不过我看着你的代码学习了 glob 这个函数,很感谢!

###
  1. 目测问题不少
  2. 先写成伪代码,然后逐步翻译成真实代码
  3. 每一步伪代码都可以输出结果,判断是否符合预期

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • PHP遍历当前路径下txt文件,随机输出且

    PHP遍历当前路径下txt文件,随机输出且

  • babel-plugin-module-resolver和tsconf

    babel-plugin-module-resolver和tsconf

  • 安装tree-node-cli之后 使用tree命令无

    安装tree-node-cli之后 使用tree命令无

  • 如何实现点击进入大屏,展示html网页,

    如何实现点击进入大屏,展示html网页,

腾讯云代理商
海外云服务器