所以这是我第一次在这个网站上发帖提问,作为一名程序员我很惭愧我没有尽快创建一个帐户,这个网站让我经历了很多大声笑,不管怎么说,我需要一些帮助
我正在创建一个系统,用户可以在其中发布自己的小状态,更新状态,共享等。我需要帮助根据用户在发布状态中的主题标签为#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);
}
感谢你们提前帮助。
答案 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(),原因我们可以在上面看到。我很有兴趣看到两个答案代码正面对面,因为肯定知道它会非常有趣。