基于已发布的主题标签PHP创建文件夹

时间:2017-05-16 00:25:29

标签: php

所以这是我第一次在这个网站上发帖提问,作为一名程序员我很惭愧我没有尽快创建一个帐户,这个网站让我经历了很多大声笑,不管怎么说,我需要一些帮助

我正在创建一个系统,用户可以在其中发布自己的小状态,更新状态,共享等。我需要帮助根据用户在发布状态中的主题标签为#hashtags创建文件夹。

所以一个例子是:“ Hello world #firstpost #helloworld ”,代码必须排除该句子中除了任何和所有主题标签之外的所有内容,然后它将创建所有用户帖子中的主题标签,在这种情况下,它会创建文件夹 firstpost helloworld (如果他们还没有存在)。

我可以使用此修改版本或至少更好/类似/相关的东西来创建文件夹吗?

$foldername = $_POST["status_posting"];
mkdir('../hashtag/' . $foldername, 0755);
for ($i = 0; $i < 1; $i++) {
    mkdir('../users/' . $foldername, 0755);
}

感谢你们提前帮助。

2 个答案:

答案 0 :(得分:0)

您可以使用正则表达式捕获主题标签,然后使用mkdir()创建目录。您可以使用file_exists()检查文件是否存在(或不是!)。

我会使用以下表达式:#(\S{1,})。此表达式查找#,然后开始捕获任何非空白字符(/S),从一次到无限次({1,})。

<?php
    $input = "Hello world #firstpost #helloworld";

    preg_match_all("/#(\S{1,})/", $input, $matches);

    foreach($matches[1] as $match){
        if (!file_exists('../hashtag/' . $match)) {
            mkdir('../hashtag/' . $match, 0755, true);
        }
    }

答案 1 :(得分:0)

php explode()消息,检查每个项目是否包含#,如果是,则mkdir项目的名称减去#。可能不是最有效的方法。

$foldername = explode(" ", $_POST["status_posting"]);
foreach($foldername as $string){
  if(strpos($string, '#') !== FALSE){
    //Make dir!
    mkdir('../hashtag/' . ltrim($string, "#"), 0755, true);
  }
}

mkdir末尾的true允许创建递归文件路径。例如,如果尚未创建hashtag文件夹,它也会创建它。

经过一些研究,自&#34;#&#34;可以在不使用正则表达式的情况下找到它,使用strpos() and explode()效率更高。 preg_match() vs strpos()速度如下所示。

no. strings  1        2       3         10      100     1000    10000
strpos()     0.01 ms  0.02 ms 0.04 ms   0.2 ms  0.9 ms  2.6 ms  25.6 ms
preg_match() 0.2 ms   0.2 ms  0.3 ms    0.47 ms 0.95 ms 7.4 ms  72.2 ms

虽然你必须考虑explode()时间因素,但php论坛指出,当不需要正则表达式时,应该使用explode(),原因我们可以在上面看到。我很有兴趣看到两个答案代码正面对面,因为肯定知道它会非常有趣。