การแปลงจำนวนเต็มเป็นสตริงใน PHP


501

มีวิธีการแปลงจำนวนเต็มเป็นสตริงใน PHP หรือไม่


8
PHP ถูกพิมพ์อย่างหลวม ๆ สิ่งที่เป็นจำนวนเต็มครั้งเดียวสามารถเป็นสตริงเช่นกันเมื่อคุณecho(ใช้ในบริบทสตริงที่เรียกว่า)
hakre

2
@hakre ใช่ php ถูกพิมพ์อย่างหลวม ๆ และ echoing จะพิมพ์ค่าในบริบทสตริง แต่สิ่งนี้จะไม่เปลี่ยนประเภทข้อมูลของตัวแปรภายใน ดังนั้น strval (ตัวแปร $) จึงถูกต้อง
vivek_23

@Vivek: strval()ไม่เปลี่ยนทั้ง $variableภายใน
hakre

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 ในนั้นเพื่อทำความสะอาด
Chris Thompson

6
แก้ไขตั้งแต่ mysql_escape_string เลิกใช้แล้วเนื่องจากไม่สนใจชุดอักขระ
Kzqai

7
@Kzqai สำหรับทุกคนที่ดูตัวอย่างนี้เพื่อลองและหลีกเลี่ยงการโจมตีของการฉีดฉันจะบอกว่าทิ้งความพยายามของคุณในการหลบหนีสตริงและใช้คำสั่งที่เตรียมไว้
chacham15

22
หลังจาก 5 ปีในที่สุดฉันก็ลบตัวอย่าง SQL เพราะไม่จำเป็นต้องตอบคำถามและทำให้เกิดความสับสน
Chris Thompson

3
คำเตือน!! หากคุณผ่านในตัวเลขบาง PHP จะรอบพวกเขาเมื่อมีการแปลงสตริง: ผลตอบแทนstrval(0.999999997) 1
danielson317

86

มีหลายวิธีในการทำเช่นนี้

สองตัวอย่าง:

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

ดูคู่มือ PHP เกี่ยวกับประเภทการเล่นปาหี่เพิ่มเติม


25
@Jazzerus ถ้า $ var เท่ากับ 0 (ศูนย์) นั่นจะกลายเป็นสตริงว่าง เป็นปัญหา
Simon Forsberg

5
การเปลี่ยน0ไปใช้""อาจไม่เลว มันขึ้นอยู่กับแอพพลิเคชั่นจริงๆ ที่กล่าวว่าคุณทำให้เป็นจุดที่ดี
WNRosenberg

2
$ f = 0; echo "$ f"; ทำงานได้ดีกับฉันศูนย์ยังคงเป็นศูนย์ ดังนั้นฉันจึงพิจารณา "$ var" เป็นคำตอบที่ฉลาด / มีประโยชน์การทำงาน 9999999 ลูป (สตริง) ใช้เวลา 0.4046459 ... วินาทีในขณะที่ "$ var" ใช้เวลา 0.3725229 ... ไม่แตกต่างกัน
Melsi

45
$foo = 5;

$foo = $foo . "";

ตอนนี้$fooเป็นสตริง

แต่คุณอาจต้องชินกับการคัดเลือกนักแสดง การคัดเลือกนักแสดงเป็นวิธีที่เหมาะสมในการทำสิ่งนั้นให้สำเร็จ:

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

อีกวิธีหนึ่งคือแค็ปซูลในเครื่องหมายคำพูด:

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

แปลกมากที่เราทั้งคู่เลือก 5 นอกจากนี้ + คือ java
karim79

ฉันคิดว่าคุณกำลังผสมไวยากรณ์การต่อข้อมูลระหว่างภาษาที่นั่น
jason

6
ฉันโน้มตัวไปข้างหน้าเพราะมันทำให้ความตั้งใจของคุณชัดเจนมาก การคัดเลือกนักแสดงมีจุดประสงค์เพียงจุดเดียว: เพื่อเปลี่ยนประเภท ตัวอย่างอื่น ๆ อาจดูเหมือนผิดพลาดในบางบริบท
แฟรงก์ชาวนา

ทำงานให้ฉัน .. ขอบคุณมาก
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
โปรดทราบว่าคำถามนี้ระบุว่า 'การแปลงจำนวนเต็ม' ไม่ใช่แบบลอย :)
ไมโครโปรเซสเซอร์ Cat

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

คุณสามารถใช้ตัวดำเนินการรอบระยะเวลาและเชื่อมสตริงเข้าด้วยกัน (และมันจะเป็นชนิด casted กับสตริง):

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

หรืออย่างถูกต้องมากขึ้นคุณเพียงแค่พิมพ์ cast จำนวนเต็มสตริง

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

0

เป็นคำตอบที่แสดงให้เห็นว่าใช่มีหลายวิธี อย่างไรก็ตามใน PHP คุณไม่ค่อยจำเป็นต้องทำเช่นนั้นจริงๆ "วิธีดันทุรัง" ในการเขียน PHP นั้นขึ้นอยู่กับระบบการพิมพ์ของภาษาที่หลวมซึ่งจะบีบบังคับชนิดที่ชัดเจนตามที่ต้องการ สำหรับค่าจำนวนเต็มมักจะไม่มีปัญหา คุณควรระมัดระวังในเรื่องค่าทศนิยม


ฉันไม่คิดว่า PHP จะบีบบังคับให้จำนวนเต็มสตริงตลอดเวลา มันจะทำเพื่อstrlen(12345);แต่ไม่ใช่สำหรับ$x = 12345; echo $x[2];ฟังก์ชั่นการคัดเลือกทั้งหมดนี้มีประโยชน์มากและโปรแกรมเมอร์จำนวนมากกำลังตรวจสอบประเภทของพวกเขามากขึ้นเรื่อย ๆ
Elzo Valugi


0

ฉันจะบอกว่ามันขึ้นอยู่กับบริบท strval () หรือตัวดำเนินการแคสต์ (สตริง) สามารถใช้ได้ อย่างไรก็ตามในกรณีส่วนใหญ่ PHP จะตัดสินว่าอะไรดีสำหรับคุณถ้าเช่นคุณใช้กับ echo หรือ printf ...

หมายเหตุเล็กน้อยหนึ่ง: die () ต้องการสตริงและจะไม่แสดง int ใด ๆ :)


"ในกรณีส่วนใหญ่ PHP จะตัดสินว่าอะไรดีสำหรับคุณ" น่าอัศจรรย์:,)
itsjavi

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

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

ดังนั้นก้องจะเป็นผลตอบแทนสตริง


เรื่อง " string ": แท้จริงหรือชนิด? หรืออย่างอื่น? คุณช่วยทำให้ชัดเจนขึ้น (โดยการแก้ไขคำตอบของคุณ )?
ปีเตอร์มอร์เทนเซ่น

ขอบคุณสำหรับความคิดเห็น @ Peter Mortensen นั่นคือประเภทผลตอบแทน "STRING" หมายความว่าค่าของคุณควรถูกแปลงเป็นสตริงในตัวแปรใหม่ นั่นเป็นเหตุผลที่ฉันแก้ไขสตริง
Kaushik shrimali

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

เร็วกว่า

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

$ foo = 5; $ foo = "$ foo" waistfull แสนวิเศษสำหรับหน่วยความจำใน PHP ใช้ ''
Arthur Kushman
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.