2014-02-11 106 views
-1

我對PHP一無所知,所以請原諒我,如果這看起來很明顯。爲什麼不將下面的代碼做什麼,我希望它做的事:修剪最後一個字符

$separator = ', '; 
$categories_list = 'Cat1, Cat2'; 
$exclude_cat = 'Cat2'; 
$categories_list = rtrim (str_replace($exclude_cat, '', $categories_list), $separator); 
if ($categories_list && $categories_list != '') { 
    echo '<br/><span class="categories-links">' . $categories_list . '</span>'; 

我得到的結果是Cat1,。我期望它是Cat1。你看到有什麼問題嗎?

謝謝

+3

適用於我:http://codepad.viper-7.com/XiFc6x – 2014-02-11 19:59:38

+0

它在這裏工作,在這個空間之間也許是一個非破壞性的空間或實際的標籤?最好在那裏得到所有的空白。另請參閱[有關trim()'](http://nl3.php.net/trim)('\ xA0'或'\ xC2 \ xA0')手冊中關於nbsp的註釋。 – Wrikken

+0

對我來說,我也只是檢查.. –

回答

0

嗯,幾個選擇這裏。我可能會做的是將'$ categories_list''爆炸'到一個數組中,刪除你不想要的項,然後'將數組'爆裂回字符串。

$categories_array = explode(',', $categories_list); 
$hidden_categories = array('Cat2'); 

foreach ($categories_array AS $category_key => $category_val) { 

    if (in_array($category_val, $hidden_categories) { 
     unset($categories_array[$category_key]); 
    } 

} 

$categories_list = implode(', ', $categories_array); 

這樣的話,你可以根據需要刪除多個類別,當你爆他們,他們就會有正確的格式進行顯示。

另一個想法是去掉任何你不想使用REGEX的字符。這比以前的方法靈活得多,但它是對原始問題的更直接的答案。

// REMOVE ANYTHING THAT'S NOT A LETTER OR A NUMBER 
$categories_list = preg_replace('/[^A-Z0-9]/i', '', $categories_list); 
0

裝飾和陣列將你的情況最好,因爲微調避免出現問題錯字製作功能RTRIM和LTRIM

PHP,有許多功能陣列的處理,看一個例子:

<?php 
$separator = ','; 
$categories_list = 'Cat1, Cat2, Cat3, Cat4'; 

$categories = explode($separator, $categories_list); 
$categories = array_filter($categories, 'strlen');//remove blank itens 
$categories = array_map('trim', $categories); 

$exclude_cat = 'Cat2'; 

$getKey = array_search($exclude_cat, $categories); 
if(false!==$getKey){ 
    unset($categories[$getKey]); 
} 

$categories = array_values($categories); 

//show with loop 
$j = count($categories); 
for($i=0; $i<$j; ++$i){ 
    echo $categories[$i],'<br>'; 
} 

//show with implode 
echo implode('<br>', $categories); 
?> 
-1

謝謝大家的回答。我終於意識到它爲什麼不起作用(這些categories_list比它寫入頁面有更多的東西)...

+0

你的意思是有兩個以上的類別?試試我的答案! –