用str_replace只替换字符串的第一个字符?

时间:2015-11-25 21:59:34

标签: php string str-replace

我正在尝试仅替换字符串的第一个字符,但它不起作用,它替换字符串上的所有“0”,这是我的代码:

$mes2 = str_replace('0', '', $mes[0]);

我想仅在其为0时替换第一个字符,例如:

  

07变为7

我不想一直替换,例如:

  

11变为1,我不想要它。

我也尝试过这种方式,但它没有按照我想要的方式工作,因为如果它是0,它也会替换第二个字符,就像10变为1一样。

$mes2 = preg_replace('/0/', '', $mes, 1);

8 个答案:

答案 0 :(得分:18)

好的,根据您问题的改进,您可能想要的是ltrim

$out = ltrim($in, "0");

这将从$in中删除所有前导零。它不会从其他任何地方删除零,并且它不会删除除零之外的任何内容。小心;如果你给它" 000"你会回来的#34;"而不是" 0"。

您可以使用类型转换,只要$in始终是一个数字(或者如果它不是,则您希望它导致0):

$out = (int) $in;
  • 007变为7
  • 000变为0
  • 100保持为100
  • 456保持为456
  • 00a变为0
  • 56a变为0
  • ab4变为0
  • -007变为-7

...等

现在,万一你只想替换第一个,所以例如" 007"变成" 07",那么你问题中提到的最新尝试几乎就在那里。你只需要添加一个"插入符号"字符,以确保它只匹配字符串的开头:

$out = preg_replace('/^0/', '', $in);

答案 1 :(得分:5)

$str = '1ere is the solution';
echo preg_replace('/1/', 'h', $str, 1); // outputs 'here is the solution'

答案 2 :(得分:3)

使用substr

$mes2 = substr($mes, 1);

这将删除第一个字符,这就是你想要实现的目标。如果您想用某些东西替换它,请使用:

$mes2 = $new_char . substr($mes, 1);

修改

我可能误解了您的问题 - 如果$mes[0]是原始字符串,请使用$mes[0]代替上面的$mes

答案 3 :(得分:2)

PHP中的字符串可以像数组一样访问

<?php
$var = "test";
$var[0] = "1";
var_dump($var);
?>

将输出string(4) "1est"

答案 4 :(得分:0)

您可以简单地使用$mes[0] = '';,或者如果您需要特定替换,例如$mes[0] = $mes[0] == '<replaced character>' ? '' : $mes[0];

答案 5 :(得分:0)

我的长期方法:

$first_letter = substr($mes[0], 0, 1);
$rest = substr($mes[0], 1);
$mes2 = str_replace('0', '', $first_letter);
$result = $mes2.$rest;

或更短:

$result = str_replace('0', '', substr($mes[0], 0, 1)).substr($mes[0], 1);

答案 6 :(得分:0)

我就是这样做的:

$mes2 = substr_replace($mes[0],'',strpos($mes[0], '0'),1);

答案 7 :(得分:0)

你可以这样做:

$mes2 = "07 test subject";
if($mes2['0']=='0') { $mes2['0']=''; }
echo $mes2;

这将输出:

7 test subject
相关问题