Есть ли простой способ удалить ведущий ноль (например, если 01 становится 1)?






$str = "01";
echo intval($str);
Просто умножьте на 1
echo "01"*1
Работает, но только до тех пор, пока строка является числом. :-)
это серьезный ответ? Я не могу сказать.
Классический трюк с добавлением арифметических вычислений, которые не изменяют исходное значение, для создания компилятора, приведения в соответствие с числовым значением! ;)
@ Джефф Этвуд: Полагаю, это серьезный ответ. Так много программистов PHP самоучки и знают, как выполнить работу, а не как ее выполнить Правильно. @ J.D. Фитц.Джеральд: Извини, что тебя преследуют. Это действительно бесит специалистов по CS. Это не явное решение проблемы.
@epochwolf - почему это не лучший способ? Ранее я рекомендовал $ str_value + 0 преобразовывать число в строке в число.
Regex заменяет /^0*/ на '' для решения возврата строки
Точный код будет примерно таким
<?php
$string_number = '000304';
echo preg_replace('/^0*/', '', $string_number);
?>
Вы можете использовать функцию ltrim:
ltrim($str,"0");
Хотя это работает в случаях, когда вы хотите удалить несколько ведущих нулей, в некоторых случаях это не то, что вам нужно. Например, попытка сделать это со значением «00» приведет к «», тогда как функция intval, предложенная ниже, даст правильное значение «0».
если вы используете функции обрезки, вы можете по ошибке удалить какой-либо другой символ, например, обрезав «12», у вас будет «2». используйте функцию intval (). эта функция преобразует вашу строку (которая может начинаться с нуля в начале или без него) в целочисленное значение. intval ("02") будет 2, а intval ("32") будет 32.
Однако, если вы, например, используете intval(011), вы получите 9 вместо 11. Правильный ответ - ltrim($str,"0");.
@WaiylKarim: передача 011 в intval () возвращает 9, потому что мы передаем числовое число 011, которое является восьмеричным числом для 9 (0 означает восьмеричное, 1 * 8 + 1 = 9), которое вернет десятичное число 9. Но если мы передадим "011" "(строковый аргумент) он вернет 11, что соответствует желаемому результату. итак: intval (011) -> 9; intval ('011') -> 11; :)
+1 за ваше объяснение. Это то, о чем я думал, однако я не знал, что передача его в виде строки вернет тот же желаемый результат, я думал, что он проигнорирует это. В этом случае мы можем использовать ltrim((string)$number, "0")); для большей безопасности, потому что иногда мы не всегда получаем данные в виде строки.
Возможно, стоит поместить вокруг него блок is_numeric (), чтобы отловить случаи, когда $ str не является числом, поскольку intval возвращает 0 в случае ошибки: fr.php.net/manual/en/function.intval.php