2013-05-11 45 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);