php etiketleme, birden fazla boşlukları kaldırmak

5 Cevap php

Ben aşağıdaki kodu var

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

Yani her bir etiketi ayırmak patlayabilir kullanmak, ama eğer kazara bir kullanıcı alanlarda eklendi? Ben bu filtre ilk preg_match kullanmalıyım? eğer varsa ve nasıl son beyaz boşluğu kaldırırım?

5 Cevap

Beyaz boşluk kaldırmak için, ilk olsa her etiket için döngü içinde yapabileceği ya, hangi trim() kullanmak için

foreach($tags as $tag):
    $tag = trim($tag);

ya da daha önce:

$tags = explode(" ", $tags);
$tags = array_map('trim', $tags);

Her iki durumda da, $tags olarak boş öğeleri filtrelemek zorunda sona erecek

foreach($tags as $tag):
    $tag = trim($tag); //This line is only required if you didn't use array_map
    if ( empty($tag){
        continue;
    }

Yani muhtemelen sadece preg_replace kullanmak daha iyi olurdu

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

Birden fazla beyaz boşluk patlayan önce tek bir alana dönüşmesini sağlayacak olan.

Birincisi, bir ya da daha fazla boş boşlukları kaldırmak:

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

Eğer varsa boşluk biten Kaldır:

$tags = ltrim($tags);

Ve o zaman patlayabilir ve daha fazla devam:

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

Bu, kendi etiketleri içine boşluk patlar. Yapmanız foreach, kendinizi Filtre. Değiştirmek eğer ...

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

Ayrıca vaktinden Döşeme olabilir.

array_filter($tags, "trim");

Şahsen, ben boşluk var etiketleri sağlayacak etiketleri sınırlandırmak için virgül kullanın.

Sen (\s)+ aramak ve tek bir boşluk ile yerini alabilir. Daha sonra herhangi bir firar white-space dikkat çekmek için dize Döşeme.

Sen gebelik işlevlerini kullanın - ama str_replace fonksiyonu çok daha hızlı bu durumda. Ayrıca, sizi regarless yaklaşım olan, İKİ KERE yöntemi uygulamak gerekir - durumda ardışık alanlarda bir tek sayı (1'den fazla) vardır:

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

C.