我有以下代码
//check out the tags, if it allready exist update with 1 if not create new record
$tag_item = "";
$tags = explode(" ", $tags);
foreach($tags as $tag):
if(!empty($tag) && $tag != " "):
$t_sql = mysqli_query($link, "SELECT id, times FROM shop_tags WHERE tag='".$tag."'");
if(mysqli_num_rows($t_sql) == 0):
mysqli_query($link, "INSERT INTO shop_tags (tag, times) VALUES ('".$tag."', 1)");
//find last updated id of the tags
$lastid = mysqli_insert_id($link);
$tag_item .= $lastid." ";
endif;
endif;
endforeach;
所以我使用explode来分隔每个标签,但如果用户偶然添加到空格怎么办?我应该先使用preg_match来过滤吗?如果有的话,如何删除最后一个空格?
答案 0 :(得分:4)
首先删除可能的一个或多个空格:
$tags = preg_replace('/\s\s+/',' ', $tags);
删除结束空格(如果有):
$tags = ltrim($tags);
然后你爆炸并继续前进:
$tags = explode(' ', $tags);
答案 1 :(得分:2)
要删除空格,第一个是使用trim()
,您可以在循环中为每个标记执行
foreach($tags as $tag):
$tag = trim($tag);
或之前:
$tags = explode(" ", $tags);
$tags = array_map('trim', $tags);
在这两种情况下,您最终都必须过滤掉$tags
foreach($tags as $tag):
$tag = trim($tag); //This line is only required if you didn't use array_map
if ( empty($tag){
continue;
}
所以使用preg_replace
可能更好$tags = preg_replace('/\s\s+/',' ', $tags);
$tags = explode(' ', $tags);
这将确保在爆炸之前将多个空格转换为单个空格。
答案 2 :(得分:2)
$tags = explode(" ", $tags);
这会将空间分解成自己的标签。用你做的foreach过滤自己。修改如果......
if(!empty(trim($tag))):
你也可以提前修剪。
array_filter($tags, "trim");
就个人而言,我使用逗号分隔标签以允许带有空格的标签。
答案 3 :(得分:1)
您可以搜索(\s)+
并将其替换为单个空格。然后修剪你的字符串以处理任何尾随的空格。
答案 4 :(得分:0)
您可以使用preg函数 - 但在这种情况下str_replace函数要快得多。此外,无论采用哪种方法,都需要应用TWICE方法 - 如果有奇数个连续空格(大于1):
$tags=str_replace(' ',' ',trim($tags)); // replace 2 spaces with 1
$tags=str_replace(' ',' ',$tags); // again
$tags=explode(' ', $tags);
下进行。