2009-08-04 5 views
1

Я в настоящее время с помощью str_replace, чтобы удалить USRID и 'запятая' сразу после нее:PHP str_replace

Например:

$usrID = 23; 
$string = "22,23,24,25"; 
$receivers = str_replace($usrID.",", '', $string); //Would output: "22,24,25" 

Однако, я заметил, что если:

$usrID = 25; //or the Last Number in the $string 

это не работает, потому что не отставая «запятая» после «25»

есть ли лучший способ, которым я может удалить конкретный номер из строки?

Спасибо.

ответ

2

YOu может взорваться строку в массив:

$list = explode(',', $string); 
var_dump($list); 

Который даст вам:

array 
    0 => string '22' (length=2) 
    1 => string '23' (length=2) 
    2 => string '24' (length=2) 
    3 => string '25' (length=2) 

Тогда, делать все, что вы хотите на этом массиве; как удалить запись, которую вы не хотите больше:

foreach ($list as $key => $value) { 
    if ($value == $usrID) { 
     unset($list[$key]); 
    } 
} 
var_dump($list); 

Что дает:

array 
    0 => string '22' (length=2) 
    2 => string '24' (length=2) 
    3 => string '25' (length=2) 

И, наконец, положить кусочки вместе:

$new_string = implode(',', $list); 
var_dump($new_string); 

И вы получите то, что вам необходимо:

string '22,24,25' (length=8) 

Возможно, это не так просто, как регулярное выражение; но на следующий день вы должны делать больше с элементами (или в день ваши элементы являются более сложными, чем просто номера), которые все еще работают :-)


EDIT: если вы хотите удалить «пустое» значение, например, когда есть два запятой, вы просто должны modifiy состояния, немного как это:

foreach ($list as $key => $value) { 
    if ($value == $usrID || trim($value)==='') { 
     unset($list[$key]); 
    } 
} 

т.е. исключить $values, которые являются пустыми. «trim» используется так, что $string = "22,23, ,24,25"; также может быть обработан, кстати.

+0

Это то, о чем я думал, что очень помогло. +1 для Дэрила, который я могу использовать для чего-то еще в какой-то момент. Еще раз спасибо. – Dodinas

+0

Добро пожаловать; Повеселись ! –

-1

Попробуйте использовать PREG:

<?php 
$string = "22,23,24,25"; 
$usrID = '23'; 
$pattern = '/\b' . $usrID . '\b,?/i'; 
$replacement = ''; 
echo preg_replace($pattern, $replacement, $string); 
?> 

Обновление: изменена $pattern = '/$usrID,?/i'; на $pattern = '/' . $usrID . ',?/i'; UPDATE2: изменил $pattern = '/' . $usrID . ',?/i$pattern = '/\b' . $usrID . '\b,?/i' на решения onnodb Замечаний ...

+0

Этот шаблон изменит «14,150,233» с $ usrID = 23 на «14,150», --- это неверно. – onnodb

2

Другой вопрос, если у вас есть пользователь 5 и попробовать чтобы удалить их, вы превратите 15 в 1, 25 в 2 и т. д. Поэтому вам нужно будет проверить запятую с обеих сторон.

Если вы хотите иметь такую ​​разделительную строку, я бы поставил запятую на обоих концах поиска и списка, хотя это было бы неэффективно, если бы оно получилось очень длинным.

Примером может быть:

$receivers = substr(str_replace(','.$usrID.',', ',', ','.$string.','),1,-1); 
2

Опцион похож на Паскаль, хотя я думаю, что немного simipler:

$usrID = 23; 
$string = "22,23,24,25"; 
$list = explode(',', $string); 
$foundKey = array_search($usrID, $list); 
if ($foundKey !== false) { 
    // the user id has been found, so remove it and implode the string 
    unset($list[$foundKey]); 
    $receivers = implode(',', $list); 
} else { 
    // the user id was not found, so the original string is complete 
    $receivers = $string; 
} 

В принципе, преобразовать строку в массив, найти идентификатор пользователя, если он существует, не установлено его, а затем лопается массив снова ,

-2

Простой способ (предоставление всех 2-значные номера):

$string = str_replace($userId, ',', $string); 
$string = str_replace(',,','', $string); 
0

Я бы простой способ: добавить запятые вокруг списка, заменить «23», с одной запятой затем удалить дополнительные запятые. Быстро и просто.

$usrID = 23; 
$string = "22,23,24,25"; 
$receivers = trim(str_replace(",$usrID,", ',', ",$string,"), ','); 

С учетом этого манипулирование значениями в списке, разделенным запятыми, обычно является признаком плохой конструкции. Эти значения должны быть в массиве.