简体   繁体   中英

Replace only the first character of a string with str_replace?

I'm trying to replace only the first character of a string, but it isn't working, it replaces all the "0" on the string, here's my code:

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

I want to replace the first character only if its a 0, example:

07 becomes 7

I don't want to replace all the time, example:

11 becomes 1, i don't want it.

I also tried this way, but it didn't work the way i want, because it's replacing also the second character if it's 0, like 10 becomes 1.

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

OK, based on refinements to your question, what you probably want is ltrim .

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

This will strip all leading zeroes from $in . It won't remove zeroes from anywhere else, and it won't remove anything other than zeroes. Be careful; if you give it "000" you'll get back "" instead of "0".

You could use typecasting instead, as long as $in is always a number (or you want it to result in 0 if it isn't):

$out = (int) $in;
  • 007 becomes 7
  • 000 becomes 0
  • 100 stays as 100
  • 456 stays as 456
  • 00a becomes 0
  • 56a becomes 0
  • ab4 becomes 0
  • -007 becomes -7

...etc.

Now, in the unlikely event that you only want to replace the first 0 , so for example "007" becomes "07", then your latest attempt mentioned in your question is almost there. You just need to add a "caret" character to make sure it only matches the start of the string:

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

Use substr :

$mes2 = substr($mes, 1);

This will remove the first character, which is what it looks like you're trying to achieve. If you want to replace it with something, use this:

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

Edit

I may have misread your question - if $mes[0] is the original string, use $mes[0] in place of $mes above.

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

Strings in PHP can be accessed just like array

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

Will output string(4) "1est"

You may simple use $mes[0] = ''; or if you need specific substitution something like $mes[0] = $mes[0] == '<replaced character>' ? '' : $mes[0]; $mes[0] = $mes[0] == '<replaced character>' ? '' : $mes[0];

My long approach:

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

Or shorter:

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

这就是我会这样做的方式:

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

You could do that like this:

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

This will output:

7 test subject

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM