2013-05-11 44 views
3

我嘗試用單詞替換單詞。這是我的嘗試:替換字的問題

<?php 
$reject = "dan n bb galeri"; 
$rejectarray=explode(" ",$reject); 
$text = "saya dan kamu ganti pin bb"; 
echo str_replace($rejectarray,"",$text); //saya kamu gati pi 
?> 

我想結果是saya kamu ganti pin,而不是saya kamu gati pi。 如何使結果如saya kamu ganti pin

+0

它消除了每次發生'n'在你的$拒絕字符串中,因爲'n'是一個元素$ rejectarray。 – orezvani 2013-05-11 11:50:24

+0

使用'kakamumu'仍然會導致'kamu'。 – Gumbo 2013-05-11 12:01:02

回答

4

嘗試添加空格:

$reject = "dan n bb galeri"; 
$text = "saya dan kamu ganti pin bb"; 

function addspaces($value) 
{ 
    return " ".$value." "; 
} 

$rejectarray = array_map('addspaces', explode(" ", $reject)); 
$text = addspaces($text); // " saya ... bb " 
// and strip result with trim() 
echo trim(str_replace($rejectarray, " ", $text)); //replace with space " " 

結果:

saya kamu ganti pin 
+0

它運作良好。謝謝@Andrey – user2126044 2013-05-11 12:11:23

3

這是因爲你的爆炸功能分割字符串數組,數組的一個元素具有值「N」

陣列的這個值被替換爲「」,所以你正在失去從ganti也「N」舞會 '腳'

這是發生

$rejectarray=explode(" ",$reject); 

回報

$rejectarray = array("dan", "n", "bb", "galeri"); 

要解決此問題,需要你應該取消設置值,使用此

unset($rejectarray[1]); 

然後做

echo str_replace($rejectarray,"",$text); 

,然後有數組包含此三個值

$rejectarray = array("dan", "bb", "galeri"); 

這個你將正確實現您的結果

+0

感謝您的解釋@chandresh_cool – user2126044 2013-05-11 11:53:50

+0

這個答案不是常見的解決方案,僅適用於以上示例 – safarov 2013-05-11 11:59:35

+0

@safarov是的,在其他情況下,我的$ text =「saya dan n kamu ganti pin bb」;如何使結果=「saya kamu ganti pin」? – user2126044 2013-05-11 12:02:46

1

$reject[1]='n';

它被''(NULL VALUE)所代替。 所以ganti變成加尼和PN變成PI

1

使用array_intersectarray_diff功能:

$reject = "dan n bb galeri"; 
$rejectarray = explode(" ", $reject); 

$text = "saya dan n kamu ganti pin bb"; 
$text_array = explode(" ", $text); 

//Find common values 
$common_values = array_intersect($rejectarray, $text_array); 

//Clean out common words from text array 
$new_text_array = array_diff($text_array, $common_values); 

//Merge array values and from new text 
echo implode(' ', $new_text_array);