2012-07-21 310 views
0

我遇到的問題是,如果我在數組$ wordstodelete中有單個字符,則它會從$ oneBigDescription中的單詞中刪除它們。刪除字符串中的字符串

$oneBigDescription = str_replace ($wordstodelete, '', $oneBigDescription); 

所以使得它看起來是這樣的:

array (size=51) 
    'blck' => int 5 
    'centrl' => int 6 
    'clssc' => int 6 
    'club' => int 10 
    'crs' => int 54 
    'deler' => int 7 
    'delers' => int 5 
    'engl' => int 6 
    'felne' => int 8 
    'gude' => int 5 
    'hot' => int 5 
    'jgur' => int 172 
    'jgurs' => int 5 
    'lke' => int 6 

有沒有辦法只刪除從$ oneBigDescription單個字符,如果是自己的?

+3

我有很難理解你的請求。你能舉一個例子來描述你的問題和你需要什麼嗎? – 2012-07-21 12:52:24

回答

2

$oneBigDescription = preg_replace("/\b$wordstodelete\b/", '', $oneBigDescription);

/b應該找字當使用一個字符時,確保它是一個單獨的單詞。

編輯:沒有完全閱讀正確的 - 這更假設你正在循環$ wordstoredlete作爲一個單詞數組。

所以,這樣的事情:

$desc = "blah blah a b blah"; 
$wordstodelete = array("a", "b"); 
foreach($wordstodelete as $delete) 
{ 
    $desc= preg_replace("/\b$delete\b/", "", $desc); 
} 

EDIT2:沒有與此很高興,所以稍微細化:

$arr = "a delete aaa a b me b"; 
$wordstodelete = array("a", "b"); 
$regex = array(); 
foreach($wordstodelete as $word) 
{ 
    $regex[] = "/\b$word\b\s?/"; 
} 
$arr = preg_replace($regex, '', $arr); 

該賬戶取出下面的空間,在HTML中通常不是渲染時的問題(因爲連續的空格通常不會被渲染),但仍然是一個好主意。這也創建了一系列的正則表達式,這似乎更好一些。

+0

謝謝你的工作! – flux 2012-07-21 13:04:39

0

這聽起來像你可能需要使用一個小的正則表達式

$oneBigDescription = preg_replace('/\sa\s/', ' ', $oneBigDescription); 

這將需要「黑中心」,並返回「黑中心」

0

可以使用的preg_replace只能更換「的話對自己」像下面這樣: (我生成的正則表達式字左右的列表可以保持不變)

$wordsToReplace = ("a", "foo", "bar", "baz"); 
$regexs = array(); 
foreach ($wordsToReplace as $word) { 

    $regexs[] = "/(\s?)". $word . "\s?/"; 
} 

$oneBigDescription = preg_replace($regexs, '\1', $oneBigDescription);