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

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


person kman99    schedule 23.06.2009    source источник
comment
PHP слабо типизирован. То, что когда-то было целым числом, также может быть строкой, например когда вы echo это (используется в так называемом строковом контексте).   -  person hakre    schedule 14.06.2012
comment
@hakre yes php типизирован слабо, и при повторении значение будет выводиться в строковом контексте. Но это не меняет тип данных переменной внутри. Следовательно, strval ($ variable) верен.   -  person nice_dev    schedule 31.08.2015
comment
@Vivek: strval() тоже не меняет $variable внутри.   -  person hakre    schedule 31.08.2015
comment
Я имел в виду $ variable = strval ($ variable);   -  person nice_dev    schedule 01.09.2015


Ответы (14)


Вы можете использовать функцию 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

// The two examples above have the same end value...
// ... And so do the two below

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

// Function call
$items = strval($var); // $items === "5";
person Chris Thompson    schedule 23.06.2009
comment
Хорошая точка зрения. Я добавил туда несколько функций mysql_escape_string, чтобы очистить его. - person Chris Thompson; 24.06.2009
comment
отредактировано, так как mysql_escape_string устарел, поскольку игнорирует кодировку. - person Kzqai; 09.09.2011
comment
Вот живая версия - ссылка - person Yash Kumar; 09.04.2012
comment
если у нас есть эти значения, то будет 55 или 10? - person freaky; 15.01.2013
comment
@freaky: $ var + $ var = 10, $ var. $ var = 55.. - это оператор конкатенации строк, а + - оператор сложения. - person Chris Thompson; 17.01.2013
comment
@Kzqai для всех, кто смотрит на этот пример, чтобы попытаться избежать атак с использованием инъекций, я бы сказал, что откажитесь от попыток экранирования строк и используйте подготовленные операторы. - person chacham15; 12.01.2015
comment
Спустя 5 лет я, наконец, удалил пример SQL, поскольку в нем не было необходимости отвечать на вопрос и возникла путаница. - person Chris Thompson; 13.01.2015
comment
Вот эталон для примеров в ответе: leifw.wickland.net/2009/08/ - person Kim Hogeling; 05.02.2015
comment
Как насчет 0 как строки? $ var = 0; - person mindsupport; 27.02.2017
comment
Предупреждение!! Если вы передадите определенные числа, php округлит их при преобразовании в строку: strval(0.999999997) вернет 1. - person danielson317; 26.10.2018

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

Два примера:

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

См. Руководство PHP по подгонке типов подробнее.

person Sanjay Sheth    schedule 23.06.2009
comment
@Jazzerus Если $ var равно 0 (нулю), это становится пустой строкой. Проблемно. - person Simon Forsberg; 05.07.2012
comment
Преобразование 0 в "" может быть неплохим; это действительно зависит от приложения. Тем не менее, вы правильно подметили. - person WNRosenberg; 03.08.2012
comment
$ f = 0; эхо $ f; у меня отлично работает, ноль все равно ноль остается. Поэтому я считаю $ var умным / полезным ответом. Выполнение 9999999 циклов (строка) занимает 0,4046459 ... сек, а $ var - 0,3725229 ... без разницы. - person Melsi; 03.03.2013
comment
@SimonForsberg Я тестировал это с помощью php 7.4.8, и теперь он конвертирует 0 в 0 - person MADforFUNandHappy; 15.07.2020
comment
@MADforFUNandHappy Я рад слышать, что PHP улучшился за последние восемь лет :) - person Simon Forsberg; 20.07.2020

$foo = 5;

$foo = $foo . "";

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

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

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

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

$foo = 5;
$foo = "$foo"
person Sev    schedule 23.06.2009
comment
Так невероятно странно, что мы оба выбрали 5. Кроме того, + - это java. - person karim79; 24.06.2009
comment
Я думаю, вы смешиваете синтаксис конкатенации между языками. - person jason; 24.06.2009
comment
Я склоняюсь к кастингу просто потому, что он проясняет ваши намерения. У кастинга одна-единственная цель: менять типы. Другие примеры в некоторых контекстах могут выглядеть почти как ошибки. - person Frank Farmer; 24.06.2009

Есть несколько способов «преобразовать» целое число в строку в 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";

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

person Alan Storm    schedule 23.06.2009

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

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

    $v = 0;

    $s = (string)$v ? (string)$v : "0";
person Microprocessor Cat    schedule 10.04.2015
comment
Обратите внимание, что в вопросе конкретно говорится «преобразование целого числа», а не числа с плавающей запятой. :) - person Microprocessor Cat; 10.04.2015
comment
Исправьте ошибку, пожалуйста. Правильная форма должна быть: $ s = (строка) $ v? (строка) $ v: 0; - person nintyfan; 26.12.2018
comment
var_dump((string)0); печатает string(1) "0" на PHP 5.5.9 (Дата выпуска: 6 февраля 2014 г.) для меня. В какой версии PHP вы получили пустую строку, если значение равно нулю? - person Lacek; 15.06.2021

Использовать:

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

Или это могло быть:

$string = (string)$intValue;

Or:

settype(&$intValue, 'string');
person gewel    schedule 06.02.2013

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

$input => 123
sprintf('%d',$input) => 123
(string)$input => 123
strval($input) => 123
settype($input, "string") => 123
person UserBSS1    schedule 27.03.2013

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

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

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

$integer = 93;
$stringedInt = (string) $integer;
person Andrew Dunkman    schedule 23.06.2009

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

person troelskn    schedule 24.06.2009
comment
Я не думаю, что PHP будет постоянно заставлять целое число превращаться в строку. Он будет делать это для strlen(12345);, но не для $x = 12345; echo $x[2];. Все эти функции преобразования довольно полезны, и многие программисты все больше и больше проверяют свои типы. - person Elzo Valugi; 19.08.2016

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

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

person merkuro    schedule 23.06.2009
comment
в большинстве случаев PHP решит, что для вас лучше всего :) - person itsjavi; 21.06.2016
comment
PHP умеет читать наши мысли :-) - person Daniel Wu; 07.04.2021

$amount = 2351.25;
$str_amount = "2351.25";

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

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

person Kaushik shrimali    schedule 23.01.2019
comment
Re строка: буквально или тип? Или что-то другое? Можете ли вы пояснить это (отредактировав свой ответ)? - person Peter Mortensen; 13.09.2019
comment
Спасибо за комментарий @ Peter Mortensen. Это возвращаемый тип STRING означает, что ваше значение должно быть преобразовано как строку в новую переменную. вот почему я отредактировал строку - person Kaushik shrimali; 13.09.2019

$num = 10;
"'".$num."'"

Попробуй это

person paradox    schedule 15.07.2020

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

$intVal = 5;
$strVal = trim($intVal);
person Imam    schedule 10.11.2015
comment
Функция trim() удаляет пробелы и другие предопределенные символы с обеих сторон строки. Хотя она возвращает строку, это плохая практика. Возможно, лучше использовать strval() или number_format(). - person Marwan Salim; 02.10.2020

$integer = 93;
$stringedInt = $integer.'';

быстрее чем

$integer = 93;
$stringedInt = $integer."";
person Arthur Kushman    schedule 21.01.2011
comment
$ foo = 5; $ foo = $ foo очень не хватает памяти при использовании PHP ''. - person Arthur Kushman; 21.01.2011