2014-02-11 4 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 –

+0

Это работает здесь, это пространство между, возможно, неразрывным пространством или вкладкой в ​​действительности? Лучше всего получить все пробелы. Также: см. [Комментарии о nbsp's в руководстве для 'trim()'] (http://nl3.php.net/trim) ('\ xA0' или' \ xC2 \ xA0'). – 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

Благодарим всех вас за ответы. Я понял, наконец, почему это не сработало (у категорий_list есть намного больше, чем на странице) ...

+0

Вы имеете в виду, что существует более двух категорий? попробуйте мой ответ! –

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