Преобразование целого числа в строку в PHP

501

Есть ли способ преобразовать целое число в строку в PHP?

kman99
источник
8
PHP свободно набран. То, что когда-то было целым числом, также может быть строкой, например, когда вы echoэто используете (используется в так называемом строковом контексте ).
Хакре
2
@hakre да php свободно набирается, и echoing печатает значение в строковом контексте. Но это не меняет тип данных внутренней переменной. Следовательно, strval ($ variable) является правильным.
vivek_23
@Vivek: strval()не меняет и $variableвнутренне.
Хакре
2
Я имел в виду $ variable = strval ($ variable);
vivek_23

Ответы:

781

Вы можете использовать strval()функцию для преобразования числа в строку.

С точки зрения обслуживания очевидно, что вы пытаетесь сделать, а не некоторые другие более эзотерические ответы. Конечно, это зависит от вашего контекста.

$var = 5;

// Inline variable parsing
echo "I'd like {$var} waffles"; // = "I'd like 5 waffles

// String concatenation 
echo "I'd like ".$var." waffles"; // I'd like 5 waffles

// Explicit cast 
$items = (string)$var; // $items === "5";

// Function call
$items = strval($var); // $items === "5";
Крис Томпсон
источник
2
Хорошая точка зрения. Я добавил туда некоторые функции mysql_escape_string, чтобы очистить их.
Крис Томпсон
6
редактируется, поскольку mysql_escape_string устарела, так как игнорирует кодировку.
Kzqai
7
@ Kzqai для тех, кто смотрит на этот пример, чтобы попытаться избежать инъекционных атак, я бы сказал, что
откажитесь
22
Через 5 лет я, наконец, удалил пример SQL, поскольку не было необходимости отвечать на вопрос, и ввел в заблуждение.
Крис Томпсон
3
Предупреждение!! Если вы передадите определенные числа, php будет округлять их при преобразовании в строку: strval(0.999999997)возвращает 1.
danielson317
86

Есть много способов сделать это.

Два примера:

 $str = (string) $int;
 $str = "$int";     

Смотрите руководство по PHP для жонглирования типов для получения дополнительной информации.

Санджай Шет
источник
25
@Jazzerus Если $ var равно 0 (нулю), это становится пустой строкой. Проблематично.
Саймон Форсберг
5
Преобразование 0в ""не может быть плохим; это действительно зависит от приложения. Тем не менее, вы делаете хорошую мысль.
WNRosenberg
2
$ f = 0; echo "$ f"; у меня нормально работает, ноль остается еще ноль. Поэтому я рассматриваю «$ var» как умный / полезный ответ. Для 9999999 циклов (строка) требуется 0.4046459 ... сек, а для $ var - 0.3725229 ... без разницы.
Мелси
45
$foo = 5;

$foo = $foo . "";

Теперь $fooэто строка.

Но вы можете привыкнуть к кастингу. Поскольку кастинг - это правильный способ сделать что-то в этом роде:

$foo = 5;
$foo = (string)$foo;

Другой способ - заключить в кавычки:

$foo = 5;
$foo = "$foo"
Sev
источник
Так невероятно странно, что мы оба выбрали 5. Кроме того, + - это Java.
karim79
Я думаю, что вы смешиваете синтаксис между языками там.
Джейсон
6
Я склоняюсь к кастингу просто потому, что это делает ваши намерения совершенно ясными. Кастинг имеет одну-единственную цель: менять типы. Другие примеры в некоторых случаях могут выглядеть почти как ошибки.
Фрэнк Фармер
Работал для меня ..
Thnx
10

Есть несколько способов «преобразовать» целое число в строку в PHP.

Традиционный способ информатики - преобразовать переменную в строку:

$int = 5;
$int_as_string = (string) $int;
echo $int . ' is a '. gettype($int) . "\n";
echo $int_as_string . ' is a ' . gettype($int_as_string) . "\n";

Вы также можете воспользоваться неявным преобразованием типов PHP и интерполяцией строк:

$int = 5;
echo $int . ' is a '. gettype($int) . "\n";

$int_as_string = "$int";
echo $int_as_string . ' is a ' . gettype($int_as_string) . "\n";

$string_int = $int.'';
echo $int_as_string . ' is a ' . gettype($int_as_string) . "\n";

Наконец, как и выше, любая функция, которая принимает и возвращает строку, может быть использована для преобразования и целого числа. Учтите следующее:

$int = 5;
echo $int . ' is a '. gettype($int) . "\n";

$int_as_string = trim($int);
echo $int_as_string . ' is a ' . gettype($int_as_string) . "\n";

Я бы не рекомендовал последний вариант, но я видел дикий код, который основывался на этом поведении, поэтому подумал, что передам его.

Алан Сторм
источник
9

Все эти ответы великолепны, но все они возвращают вам пустую строку, если значение равно нулю.

Попробуйте следующее:

    $v = 0;

    $s = (string)$v ? (string)$v : "0";
Микропроцессор Cat
источник
2
Обратите внимание, что в вопросе конкретно говорится «преобразование целого числа», а не числа с плавающей точкой. :)
Микропроцессор Cat
1
Исправьте ошибку, пожалуйста. Правильная форма должна быть: $ s = (строка) $ v? (строка) $ v: "0";
девяносто
7

Использование:

$intValue = 1;
$string = sprintf('%d', $intValue);

Или это может быть:

$string = (string)$intValue;

Или:

settype(&$intValue, 'string');
gewel
источник
4

Есть много возможных способов конвертации:

$input => 123
sprintf('%d',$input) => 123
(string)$input => 123
strval($input) => 123
settype($input, "string") => 123
Usersbs
источник
4

Вы можете использовать оператор period и связать с ним строку (и она будет приведена к типу):

$integer = 93;
$stringedInt = $integer . "";

Или, более правильно, вы можете просто ввести приведение целого числа к строке:

$integer = 93;
$stringedInt = (string) $integer;
Эндрю Данкман
источник
0

Как хорошо показывают ответы, да, есть несколько способов. Однако в PHP вам редко нужно это делать. «Догматический способ» написания PHP - это полагаться на свободную систему типизации языка, которая будет прозрачно приводить тип по мере необходимости. Для целочисленных значений это обычно без проблем. Вы должны быть очень осторожны со значениями с плавающей точкой.

troelskn
источник
Я не думаю, что PHP будет постоянно приводить целое число к строке. Это будет сделано для, strlen(12345);но не для. $x = 12345; echo $x[2];Все эти функции приведения довольно полезны, и многие программисты все чаще проверяют свои типы.
Эльзо Валуги
0

Вы можете просто использовать следующее:

$intVal = 5;
$strVal = trim($intVal);
Имам
источник
0

Я бы сказал, что это зависит от контекста. Можно использовать strval () или оператор приведения (string). Тем не менее, в большинстве случаев PHP решит, что хорошо для вас, если, например, вы используете его с echo или printf ...

Одно небольшое замечание: die () нужна строка и не будет показывать int :)

merkuro
источник
«В большинстве случаев PHP решит, что хорошо для вас» удивительно:,)
itsjavi
0
$amount = 2351.25;
$str_amount = "2351.25";

$strCorrectAmount = "$amount";
echo gettype($strCorrectAmount);    //string

Таким образом, эхо будет возвращать строку .

Каушик Шримали
источник
Re " строка ": буквально или тип? Или что-то другое? Можете ли вы сделать это более понятным ( отредактировав свой ответ )?
Питер Мортенсен
Спасибо за комментарий @ Питер Мортенсен. Это возвращаемый тип "STRING" означает, что ваше значение должно быть преобразовано как строка в новую переменную. вот почему я отредактировал строку
Каушик Шримали
-4
$integer = 93;
$stringedInt = $integer.'';

быстрее чем

$integer = 93;
$stringedInt = $integer."";
Артур Кушман
источник
$ foo = 5; $ foo = "$ foo" чрезвычайно требователен к памяти при использовании PHP ''.
Артур Кушман