只用 str_replace 替换字符串的第一个字符?
Replace only the first character of a string with str_replace?
我试图只替换字符串的第一个字符,但它不起作用,它替换了字符串中的所有“0”,这是我的代码:
$mes2 = str_replace('0', '', $mes[0]);
我只想替换第一个字符,例如:
07 becomes 7
我不想一直更换,例如:
11 becomes 1, i don't want it.
我也试过这种方法,但它没有按我想要的方式工作,因为如果它是 0,它也会替换第二个字符,就像 10 变成 1。
$mes2 = preg_replace('/0/', '', $mes, 1);
您可以简单地使用 $mes[0] = '';
或者如果您需要特定的替换,例如 $mes[0] = $mes[0] == '<replaced character>' ? '' : $mes[0];
使用substr
:
$mes2 = substr($mes, 1);
这将删除 第一个字符,这就是您想要实现的目标。如果你想用其他东西替换它,使用这个:
$mes2 = $new_char . substr($mes, 1);
编辑
我可能误解了你的问题 - 如果 $mes[0]
是原始字符串,请使用 $mes[0]
代替上面的 $mes
。
我的长期做法:
$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);
PHP中的字符串可以像数组
一样访问
<?php
$var = "test";
$var[0] = "1";
var_dump($var);
?>
会输出string(4) "1est"
我会这样做:
$mes2 = substr_replace($mes[0],'',strpos($mes[0], '0'),1);
你可以这样做:
$mes2 = "07 test subject";
if($mes2['0']=='0') { $mes2['0']=''; }
echo $mes2;
这将输出:
7 test subject
$str = '1ere is the solution';
echo preg_replace('/1/', 'h', $str, 1); // outputs 'here is the solution'
好的,根据对您问题的细化,您可能想要的是 ltrim
。
$out = ltrim($in, "0");
这将从 $in
中去除所有前导零。它不会从其他任何地方删除零,也不会删除零以外的任何内容。当心;如果你给它“000”你会回来“”而不是“0”。
您可以改用类型转换,只要 $in
始终是一个数字(或者如果不是,您希望它的结果为 0):
$out = (int) $in;
- 007 变成 7
- 000 变为 0
- 100 保持为 100
- 456 保持为 456
- 00a 变为 0
- 56a 变为 0
- ab4 变为 0
- -007 变为 -7
...等等
现在,万一您只想替换第一个 0,例如“007”变成“07”,那么您在问题中提到的最新尝试快到了。您只需要添加一个 "caret" 字符以确保它只匹配字符串的开头:
$out = preg_replace('/^0/', '', $in);
我试图只替换字符串的第一个字符,但它不起作用,它替换了字符串中的所有“0”,这是我的代码:
$mes2 = str_replace('0', '', $mes[0]);
我只想替换第一个字符,例如:
07 becomes 7
我不想一直更换,例如:
11 becomes 1, i don't want it.
我也试过这种方法,但它没有按我想要的方式工作,因为如果它是 0,它也会替换第二个字符,就像 10 变成 1。
$mes2 = preg_replace('/0/', '', $mes, 1);
您可以简单地使用 $mes[0] = '';
或者如果您需要特定的替换,例如 $mes[0] = $mes[0] == '<replaced character>' ? '' : $mes[0];
使用substr
:
$mes2 = substr($mes, 1);
这将删除 第一个字符,这就是您想要实现的目标。如果你想用其他东西替换它,使用这个:
$mes2 = $new_char . substr($mes, 1);
编辑
我可能误解了你的问题 - 如果 $mes[0]
是原始字符串,请使用 $mes[0]
代替上面的 $mes
。
我的长期做法:
$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);
PHP中的字符串可以像数组
一样访问<?php
$var = "test";
$var[0] = "1";
var_dump($var);
?>
会输出string(4) "1est"
我会这样做:
$mes2 = substr_replace($mes[0],'',strpos($mes[0], '0'),1);
你可以这样做:
$mes2 = "07 test subject";
if($mes2['0']=='0') { $mes2['0']=''; }
echo $mes2;
这将输出:
7 test subject
$str = '1ere is the solution';
echo preg_replace('/1/', 'h', $str, 1); // outputs 'here is the solution'
好的,根据对您问题的细化,您可能想要的是 ltrim
。
$out = ltrim($in, "0");
这将从 $in
中去除所有前导零。它不会从其他任何地方删除零,也不会删除零以外的任何内容。当心;如果你给它“000”你会回来“”而不是“0”。
您可以改用类型转换,只要 $in
始终是一个数字(或者如果不是,您希望它的结果为 0):
$out = (int) $in;
- 007 变成 7
- 000 变为 0
- 100 保持为 100
- 456 保持为 456
- 00a 变为 0
- 56a 变为 0
- ab4 变为 0
- -007 变为 -7
...等等
现在,万一您只想替换第一个 0,例如“007”变成“07”,那么您在问题中提到的最新尝试快到了。您只需要添加一个 "caret" 字符以确保它只匹配字符串的开头:
$out = preg_replace('/^0/', '', $in);