Menu

המרת טיפוסים ב-PHP: מחרוזת למספר, intval() ו-(int)

ממירים מחרוזת PHP למספר שלם עם (int) $str או intval($str); (int) "42" הוא 42 ו-(int) "12abc" הוא 12. למדו המרה ל-int, float, bool, string ו-array, מחרוזות מספריות, intval עם בסיס, settype, ואיך לאמת קלט במקום לקבל 0 בשקט.

בדף הזה יש עורכים שאפשר להריץ - לערוך, להריץ ולראות את הפלט מיד.

כדי להמיר ערך לטיפוס אחר, כתבו את הטיפוס בסוגריים לפניו: (int) "42" נותן את המספר השלם 42. צורת הפונקציה intval("42") עושה את אותו הדבר. המרה אף פעם לא נכשלת: טקסט שאינו מספר הופך ל-0, ומחרוזת שמתחילה בספרות שומרת רק את הספרות האלה.

ההמרות שיש ב-PHP הן (int), (float), (string), (bool), (array) ו-(object). לכל אחת יש גם פונקציה: intval(), floatval(), strval(), boolval().

מחרוזת ל-int: מה (int) ו-intval() מחזירות

PHP קוראת ספרות מתחילת המחרוזת, אחרי שהיא מדלגת על רווחים מובילים, ועוצרת בתו הראשון שלא מתאים למספר. כתיב מעריכי נחשב למספר, קידומת 0x לא.

שימו לב ש-"12.7" הופך ל-12: המרה ל-int חותכת את השבר, היא לא מעגלת. לא (int) ולא intval() מדפיסות כאן אזהרה, יהיה הקלט אשר יהיה.

intval() עם בסיס

intval($value, $base) קוראת את המחרוזת בשיטת ספירה אחרת. עם בסיס 0, PHP מסתכלת על הקידומת: 0x להקסדצימלי, 0b לבינארי, 0 מוביל לאוקטלי.

float ל-int: חיתוך, לא עיגול

(int) משמיטה את כל מה שאחרי הנקודה העשרונית, לכיוון אפס. עגלו קודם אם אתם רוצים את המספר השלם הקרוב, ושימו לב לסוגריים:

הזוג האחרון הוא מלכודת ה-float הקלאסית: (0.1 + 0.7) * 10 נשמר כ-7.999999..., ולכן חיתוך נותן 7. עיגול קודם נותן 8. עמוד המתמטיקה מסביר את round, floor ו-ceil.

המרה ל-bool, ל-string ול-array

ל-bool, רק קומץ ערכים הופכים ל-false: 0, 0.0, "", "0", null ו-[]. כל השאר הוא true, כולל "0.0", " " ו-"false".

ל-string, true הופך ל-"1", בעוד false ו-null הופכים שניהם ל-"". floats משמיטים .0 בסוף, ו-floats גדולים או קטנים מאוד נכתבים בכתיב מעריכי.

המרת מערך למחרוזת לא מחברת את האיברים שלו. זה מדפיס Tags: Array:

<?php
$tags = ["php", "web"];
echo "Tags: " . $tags;

ו-PHP מוסיפה אזהרה:

Warning: Array to string conversion in /home/index.php on line 3

השתמשו ב-implode(", ", $array) או ב-json_encode($array) כדי להפוך מערך לטקסט.

כל ההמרות במבט אחד

בחרו ערך כדי לראות מה intval, (bool), strval, is_numeric ו-gettype מחזירות עבורו. כל תא חושב על ידי PHP 8.3.

intval, (bool), strval ו-is_numeric לכל ערך של $x
Point at or tap a cell to read it as PHP.
$xintvalboolstrvalis_numericgettype
"10"
"1abc"
"abc"
""
" "
"0"
"0.0"
"1e1"
"010"
1.5
true
false
null
[]
[1, 2]
Every cell computed by PHP 8.3.19.

מחרוזות מספריות והמרה אוטומטית

מחרוזת מספרית היא מחרוזת שנראית כמו מספר: "12", "-3.5", "1e3", עם רווחים אופציונליים סביבה. PHP ממירה אותן אוטומטית בחשבון, ו-is_numeric() אומרת לכם אם מחרוזת עומדת בתנאי.

"12abc" + 1 עדיין נותן 13, אבל PHP 8 מדפיסה Warning: A non-numeric value encountered, ו-"abc" + 1 זורק TypeError. המירו או אמתו לפני שאתם עושים חשבון על קלט של משתמשים.

settype() ו-gettype()

settype() משנה את הטיפוס של משתנה במקום, ו-gettype() מדווחת עליו. get_debug_type() מחזירה את השמות הקצרים יותר שאתם רואים בהודעות שגיאה (int, float, string).

רוב הקוד משתמש בהמרה ($value = (int) $value;) במקום זאת, כי היא קצרה יותר ונקראת אותו דבר.

אמתו קלט במקום להמיר אותו

(int) אף פעם לא אומרת לא, ולכן (int) "abc" הופך בשקט ל-0 ו-(int) "5 apples" הופך ל-5. לקלט מטפסים, השתמשו ב-filter_var עם FILTER_VALIDATE_INT: היא מחזירה את המספר השלם או false.

השוו את התוצאה עם === false, כי 0 הוא מספר שלם תקין ו-== false היה דוחה אותו. עמוד filter_var מראה טווחים ומאמתים אחרים.

שאלות נפוצות

איך ממירים מחרוזת ל-int ב-PHP?

השתמשו ב-(int) $str או ב-intval($str); שתיהן נותנות אותה תוצאה בבסיס 10. (int) "42" הוא 42, (int) "12abc" הוא 12 ו-(int) "abc" הוא 0. כדי לדחות קלט שאינו מספר שלם, השתמשו ב-filter_var($str, FILTER_VALIDATE_INT), שמחזירה false במקום לנחש.

מה ההבדל בין intval() ל-(int) ב-PHP?

בבסיס 10 הן מחזירות אותה תוצאה. intval() מקבלת גם בסיס: intval('ff', 16) הוא 255, ועם בסיס 0 היא קוראת קידומות כמו 0x, 0b ו-0 מוביל לאוקטלי. כיוון שזו פונקציה, אפשר גם להעביר את intval כ-callback, כמו ב-array_map('intval', $values).

מה מחזיר (bool) "0" ב-PHP?

false. המחרוזת "0" היא אחד הערכים השקריים של PHP, יחד עם "", 0, 0.0, null ו-[]. כל מחרוזת אחרת היא true, כולל "0.0", " " ו-"false".

איך ממירים מספר למחרוזת ב-PHP?

השתמשו ב-(string) $n, ב-strval($n) או שימו אותו בתוך מחרוזת: "$n". (string) 3.0 הוא "3"; למספר קבוע של ספרות אחרי הנקודה השתמשו ב-number_format($n, 2) או ב-sprintf('%.2f', $n).

איור של שפות התכנות ב-Coddy

ללמוד תכנות עם Coddy

להתחיל