array_slice($array, $offset, $length) מחזירה מערך חדש עם $length איברים החל ממיקום $offset. המערך המקורי לא משתנה. השמיטו את $length כדי לקחת הכול עד הסוף.
ההיסט הוא מיקום (0 הוא האיבר הראשון), לא מפתח. זה חשוב במערכים אסוציאטיביים ובמערכים שהמפתחות שלהם אינם 0, 1, 2.
קבלת N האיברים האחרונים עם היסט שלילי
היסט שלילי נספר מהסוף: -1 הוא האיבר האחרון, -3 מתחיל שלושה מהסוף. אורך שלילי עוצר כמה איברים כאלה לפני הסוף.
בקשה של יותר איברים ממה שקיים זה בסדר: array_slice($log, 0, 100) מחזירה את כל החמישה.
שמירה על המפתחות המקוריים עם preserve_keys
מפתחות שלמים ממוספרים מחדש מ-0 אלא אם מעבירים true כארגומנט הרביעי. מפתחות מחרוזת תמיד נשמרים.
השתמשו ב-true כשהמפתחות אומרים משהו, כמו מזהים ממסד נתונים, ותחפשו איברים לפיהם בהמשך.
חלוקת מערך לדפים עם array_slice
הצגה של הדף $page ברשימה עם $perPage פריטים לדף היא חיתוך אחד: ההיסט הוא ($page - 1) * $perPage. הדוגמה הזו מדפיסה רשימת HTML עם קישורים לדפים. הריצו אותה ולחצו על מספר דף: אותו סקריפט ירוץ שוב כש-$_GET['page'] מוגדר מהקישור.
השורה max(1, min($pages, ...)) שומרת על ?page=99 או ?page=-1 שהוקלדו ידנית בתוך הטווח התקין. עם מסד נתונים הייתם מבקשים רק דף אחד עם LIMIT ו-OFFSET במקום לטעון כל שורה, אבל ברשימה שכבר נמצאת בזיכרון, array_slice היא כל העבודה.
array_slice מול array_splice
השמות שונים באות אחת והן עושות דברים הפוכים למקור. array_slice מעתיקה חלק החוצה. array_splice חותכת את החלק מתוך המערך שמעבירים לה, ממספרת אותו מחדש ומחזירה את האיברים שהוסרו. היא יכולה גם להכניס איברים חלופיים במקום החיתוך.
array_slice | array_splice | |
|---|---|---|
| משנה את המקור | לא | כן (לפי הפניה) |
| מחזירה | את החלק שנבחר | את החלק שהוסר |
| יכולה להכניס איברים | לא | כן, ארגומנט רביעי |
| מפתחות שלמים | ממוספרים מחדש אלא אם preserve_keys | ממוספרים מחדש |
לדרכים נוספות למחוק איברים, ראו הסרת איברים ממערך.
פיצול מערך לנתחים
כשאתם צריכים את כל הדפים בבת אחת, למשל כדי לסדר מוצרים בשורות של שלושה, array_chunk עושה את החיתוך החוזר בשבילכם.
שנו את ה-3 ל-2 או ל-4 והריצו שוב. הנתח האחרון מחזיק את מה שנשאר.
שאלות נפוצות
איך מקבלים את N האיברים הראשונים של מערך ב-PHP?
array_slice($arr, 0, 3) מחזירה את שלושת האיברים הראשונים. אם במערך יש פחות משלושה, מקבלים את כולם ובלי שגיאה.
איך מקבלים את N האיברים האחרונים של מערך?
השתמשו בהיסט שלילי: array_slice($arr, -3) מחזירה את שלושת האיברים האחרונים. השמטת האורך פירושה "עד הסוף".
מה עושה preserve_keys ב-array_slice?
כברירת מחדל array_slice ממספרת מחדש מפתחות שלמים מ-0. העבירו true כארגומנט הרביעי, array_slice($arr, 2, 3, true), כדי לשמור על המפתחות השלמים המקוריים. מפתחות מחרוזת תמיד נשמרים, עם הארגומנט או בלעדיו.
מה ההבדל בין array_slice ל-array_splice?
array_slice מחזירה עותק של חלק מהמערך ומשאירה את המקור כמו שהוא. array_splice מקבלת את המערך לפי הפניה, מסירה ממנו את החלק הזה (ויכולה להכניס במקומו איברים חלופיים) ומחזירה את מה שהסירה.