在没有str_replace的情况下用下划线替换php字符串中的点

时间:2014-04-11 07:57:48

标签: php

我有一个包含字符串的数组,其中一些字符串包含点('。')。

我必须重申。我不想用str_replace做这件事。

所以,我需要用下划线替换那些点。

例如:

for($data as $key=>$value){
   print_r($value);
}

让我们说输出如何:

'Hello. I have two dots. Please replace them!'

我们希望得到的是:

'Hello_ I have two dots_ Please replace them!'

提前致谢

6 个答案:

答案 0 :(得分:7)

这是一个代码高手还是什么?

无论如何这是 a 解决方案:

$text='Hello. I have two dots. Please replace them!';

echo IHateStrReplace(".","_",$text);

function IHateStrReplace($replace_from,$replace_to,$input)
{
    $result="";

    for($i=0;$i<strlen($input);$i++)
    {
        $result.= ($input[$i]==$replace_from)?$replace_to:$input[$i];
    }

    return $result;
} 

http://3v4l.org/Cjp4G

答案 1 :(得分:3)

怎么样

$original_string = 'Hello. I have two dots. Please replace them!';
$exploded_string = explode('.' , $original_string);
$new_string = implode('_' , $exploded_string);

答案 2 :(得分:2)

echo strtr('Hello. I have two dots. Please replace them!', '.', '_');

String Translate对字符串进行逐字节转换。

答案 3 :(得分:0)

您可以使用preg_replace。 http://nl3.php.net/preg_replace

$var = 'Hello. I have two dots. Please replace them!';
echo preg_replace('#\.#', '_', $var);

答案 4 :(得分:0)

正则表达式替换单个字符有点过分,但如果你必须避免str_replace(),那么这样就可以了:

foreach($data as $key => $value){
    $data[$key] = preg_replace('/\./', '_', $value);
}

print_r($data);

答案 5 :(得分:0)

对于未来的搜索者,strtr()(字符串翻译)会翻译单个字符,因此将其与array_map相结合可以获得一个简洁的解决方案:

// Push every item in the array through strtr()
$array = array_map('strtr', $array, ['.', '_']);

但是,在基准测试中,我发现strtr()str_replace()慢,所以我倾向于使用它。