2010-02-14 2 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); 

Это взрывает пространства в свои собственные теги. Отфильтруйте себя с помощью foreach, который вы делаете. Измените это, если ...

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

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.

Смежные вопросы