Перетворення цілого числа в рядок в PHP


501

Чи є спосіб перетворити ціле число в рядок в PHP?


8
PHP введено слабо. Те, що колись було цілим числом, може бути і рядком, наприклад, коли ви echoйого використовуєте в контексті так званого рядка .
хакре

2
@hakre yes php введено слабко, і повторення надрукує значення в рядковому контексті. Але це не змінює тип даних змінної внутрішньо. Отже, strval ($ змінна) є правильним.
vivek_23

@Vivek: strval()не змінюється $variableні внутрішньо, ні.
хакре

2
Я мав на увазі $ змінний = strval ($ змінна);
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)return 1.
danielson317

86

Є багато способів зробити це.

Два приклади:

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

Докладніше дивіться в Посібнику PHP щодо типів жонглювання .


25
@Jazzerus Якщо $ var дорівнює 0 (нуль), це стає порожнім рядком. Проблемні.
Саймон Форсберг

5
Перетворення 0в ""може бути не погано; це дійсно залежить від програми. Це сказало, ви добре зазначаєте.
WNRosenberg

2
$ f = 0; відлуння "$ f"; зі мною добре працює, нуль залишається досі нульовим. Тому я розглядаю "$ var" як розумну / корисну відповідь. Коливання циклів 9999999 (рядок) займає 0.4046459 ... сек, тоді як "$ var" займає 0.3725229 ... різниці немає.
Мелсі

45
$foo = 5;

$foo = $foo . "";

Тепер $fooце рядок.

Але, можливо, ви захочете звикнути до кастингу. Оскільки кастинг - це правильний спосіб зробити щось подібного:

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

Інший спосіб полягає в інкапсуляції лапок:

$foo = 5;
$foo = "$foo"

Настільки неймовірно дивно, що ми обидва вибрали 5. Також + є java.
karim79

Я думаю, ви змішуєте синтаксис конкатенації між мовами.
Ясон

6
Я б схилявся до кастингу, просто тому, що це робить чітко зрозумілі ваші наміри. Кастинг має одну і єдину мету: змінювати типи. Інші приклади можуть виглядати в деяких контекстах як помилки.
Френк Фермер

Працював для мене .. thnx багато
zeetit

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";

2
Зауважте, що питання спеціально говорить "перетворення цілого числа", а не плав. :)
Мікропроцесорний кіт

1
Виправте помилку, будь ласка. Правильна форма повинна бути: $ s = (рядок) $ v? (рядок) $ v: "0";
nintyfan

7

Використання:

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

Або це може бути:

$string = (string)$intValue;

Або:

settype(&$intValue, 'string');

4

Існує багато можливих способів конверсії:

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

4

Ви можете або скористатися оператором періоду і об'єднати рядок до нього (і він буде введений у рядок):

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

Або, правильніше, ви можете просто ввести передане ціле число до рядка:

$integer = 93;
$stringedInt = (string) $integer;

0

Оскільки відповіді тут добре демонструють, так, є кілька способів. Однак у PHP вам дуже рідко потрібно це робити. "Догматичний спосіб" писати PHP - це покладатися на слабку систему введення мови, яка прозоро примушує тип в міру необхідності. Для цілих значень це зазвичай без проблем. Однак ви повинні бути дуже обережними з значеннями з плаваючою комою.


Я не думаю, що PHP буде примушувати ціле число до рядка весь час. Це зробить це для, strlen(12345);але не для $x = 12345; echo $x[2];всіх цих функцій кастингу є досить корисними, і багато програмістів все більше і більше перевіряють їх тип.
Elzo Valugi

0

Ви можете просто використовувати наступне:

$intVal = 5;
$strVal = trim($intVal);

0

Я б сказав, це залежить від контексту. strval () або може бути використаний оператор кастингу (string). Однак у більшості випадків PHP вирішить, що для вас добре, якщо, наприклад, ви користуєтесь ехою або printf ...

Одна невеличка примітка: die () потребує рядку і не відображатиметься жодних інт :)


"у більшості випадків PHP вирішить, що добре для вас" amazing:,)
itsjavi

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

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

Тож відлуння буде повернутим рядком .


Re " рядок ": буквально чи тип? Або щось інше? Чи можете ви зробити це більш зрозумілим ( відредагувавши свою відповідь )?
Пітер Мортенсен

Дякуємо за коментар @ Peter Mortensen. Це тип повернення "STRING" означає, що ваше значення має бути перетворене у вигляді рядка в нову змінну. тому я відредагував рядок
Kaushik shrimali

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

швидше, ніж

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

$ foo = 5; $ foo = "$ foo" надзвичайно об'ємною талією для пам'яті при використанні PHP ''.
Артур Кушман
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.