כדי להמיר ערך לטיפוס אחר, כתבו את הטיפוס בסוגריים לפניו: (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.
| $x | intval | bool | strval | is_numeric | gettype |
|---|---|---|---|---|---|
| "10" | |||||
| "1abc" | |||||
| "abc" | |||||
| "" | |||||
| " " | |||||
| "0" | |||||
| "0.0" | |||||
| "1e1" | |||||
| "010" | |||||
| 1.5 | |||||
| true | |||||
| false | |||||
| null | |||||
| [] | |||||
| [1, 2] |
מחרוזות מספריות והמרה אוטומטית
מחרוזת מספרית היא מחרוזת שנראית כמו מספר: "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).