PHP获取随机数据,匹配出内容,存文件

一、流程

  • 1、getRandData()随机方法返回一条html数据
  • 2、匹配出数据中的内容
  • 3、判断文件是否存在
    • 3.1、存在,则判断数据是否已存入文件
      • 3.11、已存入文件 -> 执行步骤1、,数据个数自增1
      • 3.12、未存入文件 -> 存入文件,数据个数自增1
    • 3.2、不存在,直接把数据存入文件,数据个数自增1

二、代码

public function test() {
    
    
    self::getContent();
}

/**
 * 获取数据 存文件
 * @param int $number 每次最多取出10条数据(有重复的情况)
 */
public function getContent($number = 10) {
    
    
    $count = 0;
    $file = 'learn.txt';
    while (true) {
    
    
        $html = self::getRandData();
        //匹配出html中的语句
        preg_match('/<div class=\"note-content\">([^<>]*)<\/div>/i', $html, $result);
        if (empty($result)) {
    
     //匹配失败,继续下一次匹配
            continue;
        }

        $string = trim($result[1]);

        $isExist = false; //是否已存在
        if (file_exists($file)) {
    
     //如果文件存在,则查找文件内容
            $fileContent = file_get_contents($file);
            if ($fileContent) {
    
    
                $contentArr = explode(PHP_EOL, $fileContent);
                if (in_array($string, $contentArr)) {
    
     //在数组中,已经存在该语句了
                    $isExist = true;
                }
            }
        }

        ### 法一(推荐):每次最多返回$number条数据
        if ($count >= $number) {
    
     //控制循环退出条件
            break;
        }
        if (!$isExist) {
    
     //语句不存在,则加入文件中
            file_put_contents($file, $string . PHP_EOL,FILE_APPEND);
        }
        $count++;

        ### 法二:每次返回$number条数据,这样写会有问题的,当数据全部取完,会陷入死循环。
        ### 因为数据是不能重复的,所以$isExist会一直为true,就会导致$count没有自增,程序陷入死循环
        ### 我们有21条数据,一次取10条,第三次执行时只有1条数据,无法达到条件$count >= $number,程序死循环
        /*if (!$isExist) { //语句不存在,则加入文件中
            if ($count >= $number) { //控制循环退出条件
                break;
            }
            file_put_contents($file, $string . PHP_EOL,FILE_APPEND);
            $count++;
        }*/
    }
}

/**
 * 获取1条随机的数据
 * @return string
 */
public function getRandData() {
    
    
    $array = [
        '愿老去之后,嘴角有个上扬的青春。',
        '做个俗人,别无他求,干净自由。',
        '知我者为我心忧,不知我者问我何求。',
        '你其实没那么重要,只是偶尔被需要。',
        '美女只是比喻,帅哥只是虚名。',
        '19岁没能送你花,29岁请你喝酒吧。',
        '习惯了,是个很强大的词,可以代替所有一言难尽。',
        '不要赌天意,不要猜人心,天意赌不起,人心猜不透。',
        '爱而不得是常态,死缠烂打是病态。',
        '不借钱朋友没了,借了钱朋友和钱都没了。',
        '成年人必须学会的本领,就是再讨厌一个人,在人前也绝对不说他任何一句坏话。',
        '折腾的人生无非两种结果:见笑了和见效了。',
        '喜欢不能当饭吃,但被你喜欢能好好吃饭。',
        '时间,抓住了就是黄金,虚度了就是流水。',
        '记住感恩才不会怨,懂得珍惜才不会愧。',
        '面试的时候,他们叫你去聊聊,真的只是去聊聊。',
        'Mg+ZnSo4==MgSo4+Zn “你的镁夺走了我的锌”',
        '人生本过客,何必千千结!!',
        '那些能够彼此帮忙托关系的友谊,比那些天天在一起就是扯淡吃喝旅游的友谊,要强得多。',
        '路上有你,苦一点也愿意,苦很多就算了',
        '运动后,你会惊喜地发现,自己只是从肥胖变成壮。',
    ];

    //注意:$randCount = 1 和 $randCount > 1 返回的数据结构是不一样的
    $randCount = 1;
    $randKey = array_rand($array, $randCount);
    $randString = $array[$randKey];

    //加上html标签,用于正则测试
    $string = '<div class="note-content">' . $randString . '</div>';

    return $string;
}

三、文件内容

时间,抓住了就是黄金,虚度了就是流水。
记住感恩才不会怨,懂得珍惜才不会愧。
愿老去之后,嘴角有个上扬的青春。
不借钱朋友没了,借了钱朋友和钱都没了。
喜欢不能当饭吃,但被你喜欢能好好吃饭。
折腾的人生无非两种结果:见笑了和见效了。
19岁没能送你花,29岁请你喝酒吧。
路上有你,苦一点也愿意,苦很多就算了
做个俗人,别无他求,干净自由。
Mg+ZnSo4==MgSo4+Zn “你的镁夺走了我的锌”

猜你喜欢

转载自blog.csdn.net/qq_36025814/article/details/111279570