所以这是我第一次在这个网站上发布问题,作为一名程序员,我很惭愧我没有早点创建一个帐户,这个网站让我经历了很多,哈哈,无论如何,我需要一些帮助。
我正在创建一个系统,用户可以在其中发布自己的小状态,更新他们的状态,分享等。我需要帮助根据用户在其发布状态中的主题标签为 #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);
}
提前感谢您的帮助。
您可以使用正则表达式捕获主题标签,然后使用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(),原因我们可以在上面看到。我很想看到两个答案代码正面交锋,因为确定知道会很有趣。