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

4

4 回答 4

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
于 2013-05-11T12:01:56.093 回答
3

这是因为您的 explode 函数将字符串拆分为数组,并且数组的一个元素的值为 'n'

这个数组的值被替换为“”,所以你从 ganti 和 prom 'pin' 中丢失了 'n'

这就是发生的事情

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

返回

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

要解决此问题,您需要有包含这三个值的数组

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

为此,您应该使用此取消设置值

unset($rejectarray[1]);

然后做

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

然后你会正确地达到你的结果

于 2013-05-11T11:48:36.510 回答
1

$reject[1]='n';

由 ''(NULL VALUE) 代替。所以 ganti 变成 gani 而 pn 变成 pi

于 2013-05-11T11:50:05.350 回答
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);
于 2013-05-11T12:12:27.187 回答