根据发布的主题标签PHP创建文件夹



所以这是我第一次在这个网站上发布问题,作为一名程序员,我很惭愧我没有早点创建一个帐户,这个网站让我经历了很多,哈哈,无论如何,我需要一些帮助。

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

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

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

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

提前感谢您的帮助。

您可以使用正则表达式捕获主题标签,然后使用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);
}
}

我会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允许递归文件路径创建。例如,如果尚未创建主题标签文件夹,它也会创建该文件夹。

经过一些研究,由于可以在不使用正则表达式的情况下找到"#",因此使用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(),原因我们可以在上面看到。我很想看到两个答案代码正面交锋,因为确定知道会很有趣。

最新更新