2015-11-25 4 views
1

Я пытаюсь заменить только первый символ строки, но он не работает, он заменяет все «0» на шпагат, вот мой код:Заменить только первый символ строки str_replace?

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

Я хочу, чтобы заменить первый символ только, если его 0, например:

07 становится 7

Я не хочу, чтобы заменить все время, например:

11 становится 1, я не хочу этого.

Я также попробовал этот способ, но он не работает так, как я хочу, потому что это замена и второй символ, если это 0, как 10 становится 1.

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

посмотрите на [substr_replace()] (http://php.net/manual/en/ function.substr-replace.php) – Rizier123

+0

echo substr_replace ("String", "a", 0, 1); –

ответ

8

ОК, на основе уточнений на ваш вопрос, что вы, вероятно, хотите, это ltrim.

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

Это лишит все ведущие нули из $in. Он не будет удалять нули из любого места, и он не удалит ничего, кроме нулей. Быть осторожен; если вы дадите ему «000», вы вернетесь «» вместо «0».

Вы можете использовать типажи вместо этого, до тех пор, как $in всегда число (или вы хотите, чтобы привести к 0, если это не так):

$out = (int) $in; 
  • 007 становится 7
  • 000 становится равным 0
  • 100 остается как 100
  • 456 проживании в 456
  • 00a становится равным 0
  • 56а становится 0
  • AB4 становится 0
  • -007 становится -7

... и т.д..

Теперь, в маловероятном случае, если вы хотите заменить только первые 0, так, например, «007» становится «07», то ваша последняя попытка, упомянутая в вашем вопросе, почти у вас. Вам просто нужно добавить «каре» характер, чтобы убедиться, что он соответствует только начало строки:

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

Вы, возможно простое использование $mes[0] = ''; или если вам нужно специфическое заместительное что-то вроде $mes[0] = $mes[0] == '<replaced character>' ? '' : $mes[0];

3

substr использования:

$mes2 = substr($mes, 1); 

Это будет удалить первый символ, который, по-видимому, вы пытаетесь достичь. Если вы хотите, чтобы заменить его чем-то, используйте:

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

Редактировать

Может быть, я неправильно понял ваш вопрос - если $mes[0] это исходная строка, используйте $mes[0] вместо $mes выше.

+0

Но вы не знаете, действительно ли первый символ был 0, который вы хотели заменить. – Rizier123

+0

Я не верю, что этого хочет OP. Я думаю, что 0 в вопросе ищет символ в индексе 0, а не физический «0». –

+0

Я хочу заменить, только если первый символ равен 0, например: 07 станет 7, этот код будет заменять все время, например 11 станет 1, я не хочу этого. – Vinny

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); 
1

Строки в PHP можно получить так же, как массив

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

Выведет string(4) "1est"

0

Это, как я сделал бы это:

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

Вы можете сделать это так:

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

Этот выход будет:

7 test subject 
4
$str = '1ere is the solution'; 
echo preg_replace('/1/', 'h', $str, 1); // outputs 'here is the solution' 
Смежные вопросы