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

まず、考えられる1つ以上の空のスペースを削除します。

$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);

これにより、爆発する前に複数の空白が1つのスペースに変換されます。

于 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 に答える