0

我有以下代码

//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 来过滤吗?如果有的话,我如何删除最后一个空格?

4

5 回答 5

4

首先删除可能的一个或多个空格:

$tags = preg_replace('/\s\s+/',' ', $tags);

如果有,则删除结尾空格:

$tags = ltrim($tags);

然后你爆炸并继续前进:

$tags = explode(' ', $tags);
于 2010-02-14T19:18:35.547 回答
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);

这将确保在爆炸之前将多个空格转换为单个空格。

于 2010-02-14T17:12:00.530 回答
2
$tags = explode(" ", $tags);

这会将空间分解为它们自己的标签。用你做的 foreach 过滤你自己。修改如果...

if(!empty(trim($tag))):

你也可以提前修剪。

array_filter($tags, "trim");

就个人而言,我使用逗号来分隔标签以允许有空格的标签。

于 2010-02-14T17:13:43.987 回答
1

您可以搜索(\s)+并用一个空格替换它。然后修剪你的字符串以处理任何尾随空格。

于 2010-02-14T17:13:41.397 回答
0

您可以使用 preg 函数 - 但在这种情况下 str_replace 函数要快得多。此外,无论您采用哪种方法,您都需要应用 TWICE 方法——以防有奇数个连续空格(大于 1):

$tags=str_replace('  ',' ',trim($tags)); // replace 2 spaces with 1
$tags=str_replace('  ',' ',$tags); // again
$tags=explode(' ', $tags);

C。

于 2010-02-15T00:16:57.133 回答