2010-02-14 59 views
0

我有以下代碼PHP標記,刪除多個空格

//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; 

於是我就用爆炸來單獨的每個標籤,但如果不小心造成的用戶添加什麼空間?我應該首先使用preg_match來過濾這個嗎?如果有任何問題,我如何刪除最後一個空格?

回答

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

您可以搜索(\s)+並用一個空格替換它。然後修剪你的字符串來照顧任何尾隨的空白。

2
$tags = explode(" ", $tags); 

這會將空格分解爲自己的標記。過濾你自己,你做的。修改,如果...

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

你也可以提前修剪。

array_filter($tags, "trim"); 

就個人而言,我使用逗號分隔標籤以允許具有空格的標籤。

4

首先除去可能存在一個或多個空的空間:

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

刪除結尾的空格,如果有一個:

$tags = ltrim($tags); 

然後你爆炸並進一步着手:

$tags = explode(' ', $tags); 
+0

啊哈我檢查功能ltrim()但它在開始時刪除空格,如果它不是rtrim()呢?刪除最後一個。 – Christophe 2010-02-15 11:06:29

0

你可以使用preg函數 - 但在這種情況下str_replace函數要快得多。此外,regarless其中接近你拿,你需要申請兩次方法 - 萬一有奇數連續的空格(大於1):

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

C.