Chuyển đổi một số nguyên thành một chuỗi trong PHP


501

Có cách nào để chuyển đổi một số nguyên thành một chuỗi trong PHP không?


8
PHP được gõ lỏng lẻo. Số nguyên là gì một lần, cũng có thể là một chuỗi, ví dụ như khi bạn echonó (được sử dụng trong cái gọi là bối cảnh chuỗi ).
hakre

2
@hakre có php được gõ lỏng lẻo và tiếng vang sẽ in giá trị trong ngữ cảnh chuỗi. Nhưng điều này không thay đổi kiểu dữ liệu của một biến trong nội bộ. Do đó, strval ($ biến) là chính xác.
vivek_23

@Vivek: strval()không thay đổi $variablenội bộ.
hakre

2
Ý tôi là $ biến = strval ($ biến);
vivek_23

Câu trả lời:


781

Bạn có thể sử dụng strval()hàm để chuyển đổi một số thành một chuỗi.

Từ góc độ bảo trì, rõ ràng những gì bạn đang cố gắng làm hơn là một số câu trả lời bí truyền khác. Tất nhiên, nó phụ thuộc vào bối cảnh của bạn.

$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
Điểm tốt. Tôi đã ném vào một số hàm mysql_escape_opes trong đó để dọn sạch nó.
Chris Thompson

6
được chỉnh sửa vì mysql_escape_opes không được dùng nữa vì nó bỏ qua bộ ký tự.
Kzqai

7
@Kzqai cho bất cứ ai nhìn vào ví dụ này để thử và tránh các cuộc tấn công tiêm chích, tôi nói rằng hãy từ bỏ nỗ lực thoát khỏi chuỗi và sử dụng các tuyên bố đã chuẩn bị
chacham15

22
Sau 5 năm, cuối cùng tôi đã loại bỏ ví dụ SQL vì không cần thiết phải trả lời câu hỏi và đưa ra sự nhầm lẫn.
Chris Thompson

3
Cảnh báo!! Nếu bạn chuyển một số lượng nhất định, php sẽ làm tròn chúng khi chuyển đổi thành chuỗi: strval(0.999999997)return 1.
danielson317

86

Có nhiều cách để làm điều này.

Hai ví dụ:

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

Xem Hướng dẫn PHP về các kiểu tung hứng để biết thêm.


25
@Jazzerus Nếu $ var bằng 0 (không), đó sẽ trở thành một chuỗi rỗng. Có vấn đề.
Simon Forsberg

5
Chuyển đổi 0sang ""có thể không phải là xấu; nó thực sự phụ thuộc vào ứng dụng. Điều đó nói rằng, bạn làm cho một điểm tốt.
WNRosenberg

2
$ f = 0; tiếng vang "$ f"; làm việc tốt với tôi, số không vẫn là số không. Vì vậy, tôi coi "$ var" là một câu trả lời thông minh / hữu ích. Vòng lặp 9999999 (chuỗi) mất 0,4046459 ... giây trong khi "$ var" mất 0,3725229 ... không có sự khác biệt.
Melsi

45
$foo = 5;

$foo = $foo . "";

Bây giờ $foolà một chuỗi.

Nhưng, bạn có thể muốn làm quen với việc đúc. Vì đúc là cách thích hợp để thực hiện một cái gì đó thuộc loại đó:

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

Một cách khác là gói gọn trong dấu ngoặc kép:

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

Thật kỳ lạ khi cả hai chúng tôi đều chọn 5. Ngoài ra, + là java.
karim79

Tôi nghĩ rằng bạn đang trộn lẫn cú pháp nối của bạn giữa các ngôn ngữ ở đó.
jason

6
Tôi nghiêng về phía casting, đơn giản vì nó làm cho ý định của bạn rất rõ ràng. Đúc có một và chỉ một mục đích: thay đổi loại. Các ví dụ khác có thể trông giống như sai lầm, trong một số bối cảnh.
Nông dân Frank

Làm việc cho tôi .. thnx rất nhiều
zeetit

10

Có một số cách để "chuyển đổi" một số nguyên thành một chuỗi trong PHP.

Cách khoa học máy tính truyền thống sẽ là biến biến thành một chuỗi:

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

Bạn cũng có thể tận dụng chuyển đổi kiểu ẩn và nội suy chuỗi của 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";

Cuối cùng, tương tự như trên, bất kỳ hàm nào chấp nhận và trả về một chuỗi có thể được sử dụng để chuyển đổi và số nguyên. Hãy xem xét những điều sau đây:

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

Tôi sẽ không đề xuất tùy chọn cuối cùng, nhưng tôi đã thấy mã trong tự nhiên dựa vào hành vi này, vì vậy tôi nghĩ rằng tôi sẽ vượt qua nó.


9

Tất cả những câu trả lời này đều tuyệt vời, nhưng tất cả đều trả về cho bạn một chuỗi trống nếu giá trị bằng 0.

Hãy thử như sau:

    $v = 0;

    $s = (string)$v ? (string)$v : "0";

2
Lưu ý rằng câu hỏi đặc biệt nói 'chuyển đổi một số nguyên', không phải là số float. :)
Bộ vi xử lý Cat

1
Xin sửa lỗi. Hình thức đúng phải là: $ s = (chuỗi) $ v? (chuỗi) $ v: "0";
nintyfan

7

Sử dụng:

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

Hoặc có thể là:

$string = (string)$intValue;

Hoặc là:

settype(&$intValue, 'string');

4

Có nhiều cách chuyển đổi có thể:

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

4

Bạn có thể sử dụng toán tử dấu chấm và nối một chuỗi với nó (và nó sẽ được gõ thành một chuỗi):

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

Hay chính xác hơn, bạn chỉ có thể nhập cast số nguyên thành một chuỗi:

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

0

Như các câu trả lời ở đây thể hiện độc đáo, vâng, có một số cách. Tuy nhiên, trong PHP bạn hiếm khi thực sự cần phải làm điều đó. "Cách giáo điều" để viết PHP là dựa vào hệ thống gõ lỏng lẻo của ngôn ngữ, điều này sẽ ép buộc loại trong suốt khi cần. Đối với các giá trị nguyên, điều này thường không có rắc rối. Bạn nên rất cẩn thận với các giá trị dấu phẩy động, mặc dù.


Tôi không nghĩ rằng PHP sẽ ép buộc một số nguyên để xâu chuỗi mọi lúc. Nó sẽ làm điều đó strlen(12345);nhưng không phải cho $x = 12345; echo $x[2];tất cả các chức năng truyền này khá hữu ích và rất nhiều lập trình viên đang kiểm tra loại của họ ngày càng nhiều.
Elzo Valugi

0

Bạn chỉ có thể sử dụng như sau:

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

0

Tôi muốn nói rằng nó phụ thuộc vào bối cảnh. strval () hoặc toán tử đúc (chuỗi) có thể được sử dụng. Tuy nhiên, trong hầu hết các trường hợp, PHP sẽ quyết định điều gì tốt cho bạn nếu, ví dụ, bạn sử dụng nó với echo hoặc printf ...

Một lưu ý nhỏ: die () cần một chuỗi và sẽ không hiển thị bất kỳ int :)


"trong hầu hết các trường hợp, PHP sẽ quyết định điều gì tốt cho bạn" thật tuyệt vời :,)
itjavi

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

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

Vì vậy, tiếng vang sẽ là chuỗi trả về .


Re " chuỗi ": nghĩa đen hay kiểu? Hay cái gì khác? Bạn có thể làm cho nó rõ ràng hơn (bằng cách chỉnh sửa câu trả lời của bạn )?
Peter Mortensen

Cảm ơn vì nhận xét @ Peter Mortensen Đó là loại trả về "CHUINGI" có nghĩa là giá trị của bạn sẽ được chuyển đổi thành một chuỗi trong một biến mới. vậy đó là lý do tại sao tôi chỉnh sửa chuỗi
Kaushik shrimali

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

nhanh hơn

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

$ foo = 5; $ foo = "$ foo" cực kỳ eo hẹp cho bộ nhớ trong PHP sử dụng ''.
Arthur Kushman
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.