2009-08-04 197 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

你可以爆炸的字符串到一個數組:

$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) 

也許不像正則表達式那樣「簡單」;但一天你需要與你的元素(或一天,你的元素比只是普通的數字更復雜)做多,仍然會工作:-)


編輯:如果你想刪除「空」的價值觀,當有兩個逗號一樣,你只需要modifiy狀況,有點像這樣:

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

即排除$values是空的。使用「trim」,所以$string = "22,23, ,24,25";也可以處理,順便說一句。

+0

這就是我想到的,非常有幫助。 +1也適用於Daryl,我可以在一點上使用其他東西。再次感謝。 – Dodinas 2009-08-04 04:36:31

-1

嘗試使用預浸:

<?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

該模式將使用$ usrID = 23將「14,150,233」更改爲「14,150」---這是不正確的。 – onnodb 2009-08-04 07:39:15

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

基本上,將字符串轉換成一個數組,找到用戶ID,如果它存在,取消它,然後再次破滅數組。

-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,"), ','); 

就是說,操縱逗號分隔列表中的值通常表示設計不好。這些值應該在數組中。