אתה נמצא כאן יסודות השפה  >>  סוגי נתונים  >>  מערכים

מערכים

מערך הוא מעין רשימה מסודרת של אלמנטים, כך שלכל אלמנט בו יש מפתח ייחודי משלו שאליו מותאם ערך כלשהו.

כדי ליצור מערך נשתמש בפונקציית הבנייה array(), שמקבלת זוגות של 'key'=>'value' המופרדים ע"י פסיקים. מפתח של אלמנט יכול להיות מספר שלם לא שלילי או מחרוזת, ואילו הערך יכול להיות כל דבר (גם מערך אחר - מערך בתוך מערך). כאשר לא מציינים את המפתח, אז PHP נותנת אוטומטית מפתח מספרי, והוא המפתח המספרי המקסימלי שניתן עד כה +1 (אם לא הוגדר מפתח מספרי עד כה, יינתן המפתח 0). אם מצויין מפתח שכבר ניתן לו ערך, אז הערך של אותו מפתח ישוכתב ויכיל את הערך החדש יותר.

<?php
  $arr=array
/*כדי ליצור מערך אנו משתמשים בפונקציית הבנייה array().*/
(
     10
/*מפתח: (מספרי) 0
ערך: (מספר שלם) 10
לא מצוין המפתח, לכן PHP תיתן לו מפתח מספרי,
והיות ולא הוגדר שום מפתח מספרי עד לפה
יינתן לו המפתח המספרי 0.
*/

     ,'key1' => "value 1"
/*מפתח: (מחרוזת) 'key1'
ערך: (מחרוזת) "value 1"
*/

     ,5 => 100
/*מפתח: (מספרי) 5
ערך: (מספר שלם) 100
*/

     ,'key2' => "value 2"
/*מפתח: (מחרוזת) 'key2'
ערך: (מחרוזת) "value 2"
*/

     ,3 => "three"
/*מפתח: (מספרי) 3
ערך: (מחרוזת) "three"
*/

     ,97
/*מפתח: (מספרי) 6
ערך: (מספר שלם) 97
לא צויין המפתח, לכן הוא קיבל את המפתח המספרי 6
(המפתח המספרי המקסימלי עד כה היה 5).
*/

     ,'9'=>73
/*מפתח: (מספרי) 9
ערך: (מספר שלם) 73
המחרוזת '9' נהפכה למפתח מספרי.
*/

     ,'04'=>81
/*מפתח: (מחרוזת) '04'
ערך: (מספר שלם) 81
המחרוזת '04'מתקבלת כמפתח מסוג מחרוזת.
*/

     ,0=>"value 3"
/*מפתח: (מספרי) 0
ערך: (מחרוזת) "value 3"
המפתח המספרי 0 כבר הוגדר לפני-כן וערכו היה 10,
לכן ערכו ישוכתב ויהיה כעת המחרוזת "value 3".
*/

     );
  
  var_dump($arr);
/*מדפיס את המשתנה $arr בצורה מפורטת
כולל הערכים הפנימיים של המערך וסוגי המשתנים.
*/

?>

כדי לגשת לאלמנט מסויים במערך נשתמש במפתח שלו כדי לקבל את ערכו ונעשה זאת בעזרת סוגריים מרובעים.

<?php /* referring to the previous example */
  echo $arr['key2'];
/*מדפיס את הערך של האיבר במערך $arr
שהמפתח שלו הוא המחרוזת 'key2'.
*/

  echo "<BR>the element with key 0 is: ".$arr[0]
/*מחזיר את הערך של האיבר עם
המפתח המספרי 0 במערך $arr.
*/
;
?>

דרך נוספת ליצירת מערך היא באמצעות הסוגריים המרובעים:

<?php /* creating the same array as in the last example */
  $arr[]=10;
/*כאן לא מצוין ערכו של המפתח.
אחרי הסימן שווה כותבים את הערך.
*/

  $arr['key1']="value 1";
/*את המפתח אנו כותבים בתוך הסוגריים המרובעים.
ואת הערך אחרי הסימן שווה.
*/

  $arr[5]=100;
  $arr['key2']="value 2";
  $arr[3]="three";
  $arr[]=97;
  $arr['9']=73;
  $arr['04']=81;
  $arr[3]="value 3";
  
  var_dump($arr);
?>

חשוב מאוד לכתוב את המפתחות הלא מספריים עם מרכאות (בצורה של מחרוזת) כדי למנוע בעיות עם קבועים (constants) עכשיו ובעתיד.

כדי למחוק אלמנט ממערך נשתמש בפונקציה unset().

<?php
  $arr=array(0,1,2,3);
/*$arr מקבל את המערך הפשוט:
array(0=>0, 1=>1, 2=>2, 3=>3)
*/

  unset($arr[1]);
/*מוחק את האיבר במערך $arr שהמפתח שלו הוא 1.
ואז המערך יהיה: array(0=>0, 2=>2, 3=>3)
*/

  var_dump($arr);
?>

כאשר ממירים סקלר למערך, הסקלר יהיה האיבר הראשון במערך.

<?php
  $str="Hello";
  $arr=(array)$str;
/*המרה ממשתנה מסוג מחרוזת ($str), סקלר,
למשתנה מסוג מערך.
לכן $arr יהיה המערך: array(0=>"Hello")
*/

  var_dump($arr);
?>


תגובות בנושא

שאלה קטנה (אולי תיקון טעות) 01-11-01 11:01
 יוני לוי
#1

ציטוט מתוך מדריך המערכים שלך :
'9'=>73
'04'=>81

כתבת שהמפתח 9 הינו מפתח מספרי,
ולעומתו 04 הוא מחרוזת , ואני למה מבין מדוע זה כך, אם שניהם מופיעים בתוך גרשיים... (בניגוד למספרים האחרים)

מפתחות במערכים 01-11-01 11:01
 אלי חן (אדמין)
#3

המפתח '9' יהפוך למפתח מספרי 9.
המפתח '04' ישאר מחרוזת '04'.
זו לא טעות, ככה PHP עובד!

יש 2 סוגי מפתחות במערכים ב-PHP: מפתח מספרי (שלם), ומפתח בצורה של מחרוזת.
כאשר משתמשים במערך עם מפתח בצורה של מחרוזת שמגדיר מספר שלם תקני (למשל: '24'), אז PHP תהפוך את המפתח ממחרוזת למספר שלם. למה? כי ככה PHP עובדת, ככה מוגדרת השפה.
כאשר משתמשים במערך עם מפתח בצורה של מחרוזת שלא מגדירה מספר שלם תקני (למשל: '07'), אז המפתח ישאר בצורה של מחרוזת.

כאשר מגדירים מערך עם מפתח בצורה של מחרוזת שמגדירה מספר שלם, לדוגמא '9', אז PHP תהפוך אותו למפתח מספרי 9, אך עדיין ניתן יהיה לגשת אליו גם דרך המפתח '9' (מחרוזת), כי PHP תהפוך את המפתח אוטומטית למספר.

שאלה 05-12-02 03:01
 ארז
#150

$arr=(array)$str;
אני לא ממש הבנתי למה זה לא הולך ככה:
$arr=array($str);

תודה

תשובה לשאלה 05-12-02 03:02
 אלי חן (מנהל)
#152

השורה הראשונה היא המרה של משתנה (מסוג כלשהו) למשתנה מסוג מערך.
השורה השניה היא הגדרה של משתנה מסוג מערך.
אומנם התוצאה בשני המקרים תהיה זהה (במקרה הנתון בדף זה), אך אחד זה המרה והשני זה הגדרה.
אם תגדיר, למשל, את str$ להיות מערך כלשהו, אז שני המקרים יתנו לך תוצאות שונות. תוכל לבדוק זאת.

למה צריכים מערכים? 06-12-02 17:01
 לב
#264

לא ממש הבנתי איך המערכים עובדים, ולמה צריך אותם?

תגובה: למה צריכים מערכים? 06-12-02 17:02
 אלי חן (מנהל)
#267

מערך הוא סוג של משתנה מורכב, שבעצם מאגד בתוך משתנה אחד מספר ערכים/אלמנטים. בעיקר משמש עבור ייצוג של רשימת ערכים עם מכנה משותף. למשל: רשימת ירקות, רשימת מכוניות, רשימה של תוצאות חיפוש וכו' וכו'... קשה לקיים שפת תכנות טובה ללא מערכים - מערך הוא אבן בניין חשוב מאוד בכל שפת תכנות.

למה אתה לא משתמש... 08-12-02 03:00
 יקיר סיטבון
#361

למה אתה לא מדפיס את הנתונים של המערך, ע"י הפונקציה: print_r???
אני חושב שהיא מדפיס את המערך בצורה יותר ברורה!

יקיר.

סקלר? 31-10-02 23:01
 יוסי
#522

שאלה של הדיוט: מה זה סקלר? ניסיתי ולא מצאתי באתר שלך הסבר לזה

סקלר 31-10-02 23:02
 אלי חן (מנהל)
#527

ב-PHP סוג ערך סקלרי, הכוונה היא ל:
- בוליאן (אמת או שקר)
- מספרים שלמים
- מספרים עשרוניים
- מחרוזות

כל הכבוד 02-11-02 05:00
 חתול במגפיים
#602

שלום, אני מתכנת ותיק, מעולם לא נגעתי ב-PHP, אני יושב כבר עשר דקות מול האתר שלך וקורא, מעולם לא למדתי שפה מהר כ"כ וברור כ"כ, בכלל כל הכבוד על היוזמה, אני מאוד מקווה שאתה מרוויח מזה משהו.

לא הבנתי מילה! 01-12-03 03:02
 [ללא שם]
#657

יש לי ידע ב C.
וסחתיין- עד עכשיו התרשמתי מהמדריך שלך לטובה.
אבל עכשיו שקראתי את המדריך על המערכים לא הבנתי מילה!

עברית במערכים 03-12-03 18:01
 דורון
#768

המערך שלי קורא שדות בעברית. כאשר הוא מגיע לשדה שנגמר בסוגריים - הוא מעביר את הסוגר האחרון לתחילת השורה והופך אותו (אני משתמש בעיברית לוגית).
בקריאת שדה בעברית שיש בו את סימן הגרש (') אני מקבל הודעת שגיאה - גרש בערך השמור בין גרשיים. המלצות? רעיונות?

עברית במערכים 03-12-03 20:02
 אלי חן (מנהל)
#773

הבעיה היא לא ב PHP אלא בהצגת הדף שלך..
כדי להציג עברית בצורה טובה, אתה צריך להחליף את הכיוון ל מימין-לשמאל:
<span dir=rtl>
או ב css:
direction:rtl;

בקשר לגרש.. 03-12-03 20:02
 אלי חן (מנהל)
#774

תשתמש בפונקציה addslashes

המרת מערך למחרוזת 04-12-03 01:01
 לירון
#789

אני מנסה כבר כמה זמן, אך לא ממש מצליח.
מה שאני צריך זה להרכיב מחרוזת שהמקור שלה הוא במערך.

כלומר, מערך המכיל את הערכים 10 20 30 40
ואני רוצה להציב אותם במערך עם פסיקים ביניהם.

תודה נראש

זמן ריצה 09-12-03 05:01
 תמי
#1104

מה הזמן הריצה של מערכים בphp?
היתרון של המערכים הוא שהאינדקסים שלהם הם מספרים ולכן זמן הריצה הוא קבוע, אך במידה והאינדקסים יכולים להיות מחרוזות מה זמן הריצה במקרה הזה?

מערכים עם אינדקסים מספריים ואסוציאטיביים 09-12-03 18:02
 אלי חן (מנהל)
#1134

המערכים הרגילים הם מערכים עם אינדקסים מספריים. PHP תומכת גם במערכים אסוציאטיביים עם אינדקסים של מחרוזות.
מערך מספרי הוא מהיר יותר ממערך אסוציאטיבי.. אבל ההבדל הוא מאוד מאוד זניח (ממש אפסי). אפשר אפילו להגיד שזמן הגישה הוא זהה! (אם תעברי על פני חצי מיליון אלמנטים בלולאה, אולי רק אז תרגישי בהבדלים מזעריים).
יותר חשוב הוא זמן חיפוש במערך.. כאן רואים יתרון עצום למערכים אסוציאטיביים, שכן חיפוש על המפתחות של המערך (array_key_exists) הרבה יותר מהיר מחיפוש על הערכים של המערך (in_array)..

אין לי ידע קודם בשפות תכנות 09-12-04 14:01
 נתנאל חדד
#1825

אין לי ידע קודם בשפות תכנות ועד עכשיו ממש התרשמתי מהמדריך שלך
באמת אחלה מדריך אבל במערכים לא הבנתי כלום
ממש כלום אין לי מושג מה הולך פה
אתה יכול להסביא לי קצת יותר בפירוט???

לא מובן קטע זה 03-12-08 10:01
 אביב אסבן
#2803

לא ממש הבנתי עדיין מהו המערך ומה הוא עושה

לבחור ששאל על ההבדל בין '9' ל-'04' 01-11-09 10:02
 חזי הלפרט
#2870

יתכן ו-PHP מזהה את '9' כתוו (character) ולכן ההמרה למספר היא מיידית לעומת זאת '04' מזוהה כמחרוזת (string) ולכן לא מתבצעת המרה מיידית. מעניין לשמוע האם זהו באמת כך.


לדף הקודםמחרוזות -הקודם
לתחילת הדףלתחילת הדף
הבא- אובייקטיםלדף הבא