Menu

substr() ב-PHP: חיתוך חלק ממחרוזת

substr($string, $offset, $length) מחזירה חלק ממחרוזת. למדו היסטים שליליים, קבלת התווים הראשונים או האחרונים, mb_substr לטקסט יפני ולטקסט UTF-8 אחר, substr_count וקיצור טקסט עם שלוש נקודות.

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

substr($string, $offset, $length) מחזירה את החלק של $string שמתחיל במיקום $offset (נספר מ-0) ובאורך $length תווים. substr('Hello world', 0, 5) מחזירה "Hello". השמיטו את $length כדי לקבל הכול עד הסוף.

substr() סופרת בתים. זה זהה לתווים בטקסט באנגלית, אבל לא ביפנית, בסינית, באימוג'י או באותיות עם סימנים דיאקריטיים. עבורם השתמשו ב-mb_substr(), שמוצגת בהמשך.

תחביר

substr(string $string, int $offset, ?int $length = null): string
  • $offset הוא המקום שבו מתחילים. 0 הוא התו הראשון. ערך שלילי נספר מהסוף.
  • $length הוא כמה בתים לקחת (בית אחד הוא תו אחד בטקסט ASCII פשוט). ערך שלילי משאיר בחוץ כמה כאלה מהסוף. null (או השמטה) פירושו "עד הסוף".

היסט ואורך שליליים: עבודה מהסוף

$offset שלילי מתחיל לספור מסוף המחרוזת, ולכן -1 הוא התו האחרון. $length שלילי עוצר כמה תווים כאלה לפני הסוף.

substr($s, 0, -1) היא הדרך הרגילה להסיר את התו האחרון, למשל פסיק שלולאה השאירה בסוף.

קבלת התו הראשון או האחרון

לבית בודד אפשר גם לגשת למחרוזת ישירות לפי אינדקס. $s[0] הוא התו הראשון, ומאז PHP 7.1 $s[-1] הוא האחרון.

גישה למיקום שלא קיים מדפיסה אזהרה, בעוד substr() פשוט מחזירה מחרוזת ריקה. אם המחרוזת עשויה להיות ריקה, העדיפו את substr().

מחוץ לטווח: מחרוזת ריקה, לא false

אם $offset נמצא אחרי סוף המחרוזת, substr() מחזירה "" ב-PHP 8. ב-PHP 7 היא החזירה false, ולכן קוד ישן שבודק === false כבר לא עובד.

טקסט ביפנית: השתמשו ב-mb_substr

UTF-8 שומר קאנה וקאנג'י נפוצים ב-3 בתים כל אחד (קאנג'י נדירים כמו 𠮷 ואימוג'י תופסים 4). substr() סופרת בתים, ולכן substr('こんにちは', 0, 3) מחזירה רק את こ, ואורך שלא נוחת על גבול של תו חותך תו באמצע ומפיק טקסט שבור. mb_substr() מקבלת את אותם ארגומנטים וסופרת תווים.

אותו הדבר חל על אימוג'י ועל אותיות עם סימנים דיאקריטיים כמו é. ספירת תווים נעשית עם mb_strlen(); ראו strlen() על בתים מול תווים.

קיצור טקסט עם שלוש נקודות

קיצור כותרת ארוכה לרשימה או לכרטיס הוא השימוש האמיתי הנפוץ ביותר ב-substr(). השתמשו ב-mb_substr() כדי שכותרת ביפנית לא תיחתך אף פעם באמצע תו, והוסיפו ... רק כשבאמת קיצרתם משהו.

mb_strimwidth($text, 0, $width, '...') עושה את אותו הדבר לפי רוחב תצוגה, שבו תו יפני ברוחב מלא נחשב 2 עמודות ואות לטינית 1. היא מתאימה לפריסות ברוחב קבוע.

ספירת תת מחרוזת עם substr_count

substr_count($haystack, $needle) מחזירה כמה פעמים $needle מופיעה. היא רגישה לרישיות ולא סופרת התאמות חופפות.

substr עם strpos: טקסט לפני תו או אחריו

שלבו את substr() עם strpos() כדי לחתוך בתו שהמיקום שלו לא ידוע מראש, כמו ה-@ בכתובת אימייל:

בדקו ש-strpos() לא החזירה false לפני שאתם משתמשים בתוצאה שלה: אם התו חסר, false מטופל כ-0 בלי אזהרה, ולכן substr('nobody', 0, $at) מחזירה "" ו-substr('nobody', $at + 1) מחזירה "obody".

שאלות נפוצות

איך מקבלים את התווים האחרונים של מחרוזת ב-PHP?

השתמשו בהיסט שלילי: substr($s, -3) מחזירה את 3 התווים האחרונים. לטקסט שעשוי להכיל יפנית או תווים מרובי בתים אחרים, השתמשו ב-mb_substr($s, -3).

מה ההבדל בין substr ל-mb_substr?

substr() סופרת בתים ו-mb_substr() סופרת תווים. ב-UTF-8 קאנה וקאנג'י נפוצים תופסים 3 בתים כל אחד, ולכן substr('日本語', 0, 2) חותכת תו באמצע, בעוד mb_substr('日本語', 0, 2) מחזירה "日本".

מה substr מחזירה אם ההתחלה נמצאת אחרי סוף המחרוזת?

מחרוזת ריקה. מאז PHP 8.0, substr('abc', 5) מחזירה ""; PHP 7 החזירה false.

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

substr($s, 0, -1) מחזירה הכול חוץ מהבית האחרון. השתמשו ב-mb_substr($s, 0, -1) לטקסט מרובה בתים, או ב-rtrim($s, ',') אם אתם רוצים להסיר רק תו מסוים בסוף.

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

substr_count($haystack, $needle): substr_count('banana', 'an') מחזירה 2. היא רגישה לרישיות ולא סופרת התאמות חופפות.

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

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

להתחיל