םש להא ןוכית , ןג תמר סרוק
Download
Report
Transcript םש להא ןוכית , ןג תמר סרוק
תיכון אהל שם ,רמת גן
קורס – PHPהרצאה מס' 9
מערכים
•רקע כללי
•הגדרת מערך פשוט – וריצה לאורכו
•מערכים בעלי-אינדקס מחרוזתי
•מערכים רב-ממדיים
•מערכים של מערכים
חלק מהזכויות שמורות © אסף פוניס ,רז מרק ודימה פרפורניק 2003-2005
ניתן להשתמש במצגת זאת לפי רישיון CCבכתובת:
http://creativecommons.org/licenses/by-nc-sa/2.5
1
רקע כללי
• מערכים הם למעשה משתנים המאחסנים בתוכם מספר
ערכים .כאשר כל ערך מוכל ב"תא".
• כל מערך מורכב משני אלמנטים :ערך (המשתנה המוכל
בתא במערך) ,ואינדקס (המסמל את התא).
$countries
אינדקס
ערך
4
’‘us
3
’‘uk
2
’‘de
1
’‘cr
0
’‘ca
2
מערך פשוט
• ב 0 ,PHPהוא מספר טבעי ,ולכן המערכים ,כברירת מחדל ,הם
"מבוססי ,“0כלומר לתא הראשון במערך יש אינדקס .0
• הגישה לערך במערך מתבצעת ע"י הרצף:
;]$var[index
$countries
ההפניה
ערך
]$countries [0] $countries [1] $countries [2] $countries [3] $countries [4
’‘us
’‘uk
’‘de
’‘cr
’‘ca
3
אתחול מערך
• בניגוד למשתנים רגילים ,מערכים יש לאתחל לפני השימוש בהם.
נהוג לאתחל מערך בעזרת המבנה ) ( ,arrayכשמכניסים לסוגריים
את הערכים ההתחלתיים שיאוחסנו בו:
;)’$countries = array (‘ca’, ‘cr’, ‘de
$countries
]$countries [0] $countries [1] $countries [2
’‘de
’‘cr
’‘ca
אם אין ברצוננו לתת למערך ערכים התחלתיים ,נרשום פשוט
;)( .$countries = arrayרישום זה הוא מינימלי ,אך הכרחי בכל הגדרת
4
מערך.
אתחול מערך
• אפשר גם לבחור את האינדקס שממנו תתחיל הספירה של
האינדקסים בסדר עולה ,גם כאשר אין מדובר על האינדקס הראשון:
;)’$countries = array (1=>’cr’, 3=>’uk’, ‘us
$countries
]$countries [3] $countries [4
]$countries [1
’‘uk
’‘cr
’‘us
5
אתחול מערך
• להוספת ערכים למערך מוגדר ,נכתוב:
;’$countries []=‘ca
ההוראה הנ"ל מוסיפה למערך את הערך ’ ‘caבתא הראשון*
שאין בו ערך עדיין .במקרה זה.index 0 ,
$countries
]$countries [0
’‘ca
*אחרי האינדקס הגבוה ביותר שנעשה בו שימוש
6
אתחול מערך
• אפשר לפרט בדיוק את התא אליו רוצים להכניס את
הערך.
;’$countries [3]=‘uk
$countries
]$countries [3
]$countries [0
’‘uk
’‘ca
7
אתחול מערך
• כעת אם נרשום:
;’$countries []=‘us
יתווסף הערך באופן אוטומטי אחרי האינדקס הגדול ביותר
שנעשה בו שימוש.
$countries
]$countries [3] $countries [4
]$countries [0
’‘uk
’‘ca
’‘us
8
ריצה על מערך פשוט
• בכדי לרוץ על מערך ("מבוסס - "0בעל אינדקסים טבעיים),
נרשום:
;)’$countries = array (‘cr’, ‘de’, ‘us
;)$num_elements = count ($countries
)for ($idx=0; $idx < $num_elements; $idx++
הדפס כל ערך בשורה נפרדת //
הפונקציה ) ( count
;“echo $countries [$idx] ."<br />\n
מונה את מספר
הערכים במערך
9
ריצה על מערך פשוט
• דוגמה חשובה -מיון בועות:
נציג כעת קטע תוכנית חשוב ,הממיין מערך חד מימדי בעל ערכים ממשיים,
בשיטה שנקראת "מיון בועות":
חשוב לזכור ולהבין
דוגמה זו ,כדי להשתמש
ביעילות ובחכמה
במערכים ובריצה עליהם.
// bubble sort for $ar
)for($i=count($ar)-1;$i<=0;$i--
{ )for($j=0;$j<$i;$j++
{ )]if($ar[$j]>$ar[$j+1
;]$ezer=$ar[$j
;]$ar[$j]=$ar[$j+1
;$ar[$j+1]=$ezer
} //if
} //for j
10
ריצה על מערך פשוט
• נציג את הפונקצייה ,print_rשמציגה את הפרטים המלאים אודות כל
מערך שהוא:
<?php
;)$ar=array(1,2,’dimka’,7
;$ar[6]=true
;’$ar[‘my_index’]=‘xyz
;)print_r($ar
;’$ar[]=‘true
>?
פונקצייה זו מקבלת מערך ומדפיסה את כל המידע אודותיו :מאפיינים,
אינדקסים ,וערכים.
11
מערכים בעלי אינדקס מחרוזתי
PHP אך ב, בכל המערכים שראינו האינדקס היה מספרי וטבעי,• עד כה
ועליו ניתן.string כלומר,יש אפשרות שהאינדקס יהיה גם מחרוזתי
.להפעיל את כל הפעולות שביצענו על מערך פשוט
$countries [‘ca’] = ‘Canada’;
$countries [‘cr’] = ‘Costa Rica’;
$countries [‘de’] = ‘Germany’;
$countries [‘uk’] = ‘United Kingdom’;
$countries [‘us’] = ‘United States’;
$countries [‘ca’]
‘Canada’
12
$countries [‘cr’]
‘Costa Rica’
$countries [‘de’]
‘Germany’
$countries [‘uk’]
‘United Kingdom’
$countrie[’us’]
‘United States’
מערכים בעלי אינדקס מחרוזתי
:• או בצורה שונה
$countries = array ( ‘ca’ => ‘Canada’, ‘cr’ =>’Costa Rica’,’de’
=> ‘Germany’,’uk’=>’United Kingdom’, ‘us’=>’United
States’);
$countries [‘ca’]
‘Canada’
13
$countries [‘cr’]
‘Costa Rica’
$countries [‘de’]
‘Germany’
$countries [‘uk’]
‘United Kingdom’
$countrie[’us’]
‘United States’
מערכים בעלי אינדקס מחרוזתי
• הערה חשובה
כפי שנאמר בהרצאות הקודמות ,קיים הבדל בין ,1המייצג מספר ובין ’‘1
המייצג מחרוזת .אולם ,הבדל זה אינו מורגש באינקדסים של מערכים(!):
לכן חשוב מאוד שלא יוגדרו במערך
אינקדסים מחרוזתיים ואינדקסים
מספריים ש'נראים' אותו דבר .לא
מומלץ להשתמש באינקדסים כגון
’ ,‘1’,’2’,’22000אלא רק באלה
מהסוג .1,2,22000
שימוש נבון מסוג זה מבטיח עבודה
"תכנותית".
<?php
;)($ar=array
;$ar[0]=2
;’$ar[‘0’]=‘polka dots
echo $ar[0]; //prints polka dots
;’$ar[0]=‘something
echo $ar[‘0’]; //prints something
>?
14
מערכים בעלי אינדקס מחרוזתי
• לולאת foreach
ראינו כי על מערכים עם אינדקס מספרי ניתן לעבור ע"י לולאת for
פשוטה .כיצד עוברים אפוא על מערכים בעלי אינדקס מחרוזתי?
בעזרת הלולאה שונה הנוצרה רק לשם כך.foreach ,
תחביר הלולאה:
{ )foreach($ar as $idx=>$value
//statements
}
הלולאה עוברת על המערך ,$arמהאינדקס הראשון שלו לאחרון,
שמתאחסן ב ,$idx-לפי סדר הופעתם(לא משנה אם מספריים או
מחרוזתיים) ,ומכניסה את ערך המערך באינדקס הנ"ל ,לתוך המשתנה 15
.$value
מערכים בעלי אינדקס מחרוזתי
foreach • לולאת
:דוגמה
$ar=array(‘first’=>’TV’,’second’=>’keyboard’,’third’=>’5shekels’);
print_r($ar); echo “<hr /><br />”;
foreach($ar as $index=>$myval) {
echo $myval.” is in index num ”.$index .”<br />\n”;
$ar[$index]=‘loser’;
}
echo “<hr />”; print_r($ar); echo “<br />”;
16
מערכים בעלי אינדקס מחרוזתי
• לולאת foreach
בדוגמה זו יתקבל:
17
מערכים בעלי אינדקס מחרוזתי
• לולאת foreach
חשוב לציין כי לא חובה לכלול בלולאת ה foreachאת משתנה האינדקס
והיא תעבוד מצויין גם בלעדיו:
;)’$ar=array(‘first’=>’TV’,’second’=>’keyboard’,’third’=>’5shekels
)foreach($ar as $myval
;”echo $myval.” is next in line <br />\n
במשתנה האינדקס משתמשים בעיקר כאשר רוצים לשנות את ערכי
המערך באמצע הלולאה(למרות שיש דרך נוספת לעשות זאת).
18
מערכים רב מימדיים
• ניתן להגדיר מערכים דו מימדיים:
)for ($i=0; $i<4; $i++
)for ($j=0; $j<5;$j++
;$ar [$i] [$j] = $i
הצגת המערך בטבלה(אותה ניתן להדפיס בעזרת 2לולאות באופן
דומה) ,תראה:
0
0
0
0
0
1
1
1
1
1
2
2
2
2
2
3
3
3
3
3
שימו לב לסדר האינדקסים!!!שורה-ראשון .עמודה-שני.
19
מערכים רב מימדיים
• אם נדפיס את המערך הנתון בעזרת ,print_rנקבל:
20
מערכים רב מימדיים
• באותה צורה בדיוק ניתן להגדיר מערך רב מימדי:
)for ($i=0; $i<4;$i++
)for ($j=0; $j<5; $j++
)for ($t=0; $t<20; $t++
)for ($p=20; $p>-7; $p--
;$ar[$i][$j][$t][$p]=$i*$t-$p*$j
וכו'...
אולם לא סביר שתזדקקו למערך בעל יותר משלושה מימדים(שגם בו תיתקלו
לעיתים מאוד רחוקות) .לא מומלץ להגדיר מערכים בעלי מימדים רבים,
מכל סיבה שהיא ,ואם עשיתם כן ,ככל הנראה זה מיותר.
21
מערכים של מערכים
• לתאים הנמצאים בכל מערך נתון ניתן להכניס כל משתנה שנרצה .בפרט,
כל תא במערך הנ"ל יכול להיות מערך בפני עצמו .לדוגמה:
// inner arrays
;)$in_ar=array(1,2,3
;)’$in_ar2=array(‘moshe’,’danny’,’yossi
;)$ar=array($in_ar,$in_ar2
;)print_r($ar
22
מערכים של מערכים
• חשוב להבין ש-מערכים של מערכים ומערכים רב מימדיים הם אותו
הדבר .לעתים נוח יהיה לנו לאתחל(ולהתייחס אינטואיטיבית) מערך
מסובך כמערך רב מימדי:
)for($i=0;$i<10;$i++
)for($j=0;$j<10;$j++
;$ar[$i][$j]=$j-$i
•
ולעתים כמערך של מערכים:
;)’$ar1=array(‘dog’,’cat’,’sheep
)$ar2=array(9,20,78,-200.6
;)$ar=array($ar1,$ar2
23