web-dev-qa-db-ja.com

文字列の最初の文字のみをstr_replaceに置き換えますか?

文字列の最初の文字だけを置き換えようとしていますが、機能していません。文字列のすべての「0」が置き換えられます。コードは次のとおりです。

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

最初の文字が0の場合にのみ置き換えたい、例:

07は7になります

いつも交換したくない、例:

11が1になります。

私もこの方法を試しましたが、2番目の文字が0の場合、10が1になるように置き換えられるため、希望どおりに機能しませんでした。

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

OK、あなたの質問の改良に基づいて、あなたがおそらく欲しいのは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」になると、質問で言及された最新の試みはほぼ完了します。文字列の先頭にのみ一致するようにするには、「キャレット」文字を追加する必要があります。

$out = preg_replace('/^0/', '', $in);
21
Doug McLean
$str = '1ere is the solution';
echo preg_replace('/1/', 'h', $str, 1); // outputs 'here is the solution'
5
cpugourou

substrを使用します:

$mes2 = substr($mes, 1);

これはremove最初の文字になります。これはあなたが達成しようとしているように見えます。それを何かと交換したい場合は、これを使用してください:

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

編集

質問を読み間違えた可能性があります。$mes[0]が元の文字列の場合は、上記の$mes[0]の代わりに$mesを使用してください。

3
Doug McLean

PHPの文字列は、配列と同じようにアクセスできます

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

string(4) "1est"を出力します

2
Azenis

$mes[0] = '';を使用するか、$mes[0] = $mes[0] == '<replaced character>' ? '' : $mes[0];のような特定の置換が必要な場合は簡単に使用できます。

0
max

あなたはこのようにそれをすることができます:

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

これは出力します:

7 test subject
0
mandza

私の長いアプローチ:

$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);
0
Standej

これは私がそれをしたであろう方法です:

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