Sc®ipt
11-12-2010, 03:26 PM
بسم الله الرحمن الرحيم
http://upload.wikimedia.org/wikipedia/ar/thumb/8/85/%D8%B4%D8%B9%D8%A7%D8%B1_PHP.png/200px-%D8%B4%D8%B9%D8%A7%D8%B1_PHP.png
السلام عليكم و رحمة الله و بركاته .. في بداية الحديث اود الإعتذار عن انقطاع دروس الدورة و ذلك لأمور خارجة عن ارادتي فأرجوا منكم معذرتي , والآن لنعد الى دورتنا , في الدروس السابقة قطعنا شوطا كبيرا في تعلم اساسيات لغة php و تعلمنا الدوران و الطباعة و النماذج و اتخاذ القرار و النصوص و غيرها من الدوال المتفرقة و بإمكانكم متابعة الدروس السابقة من خلال الفهرس التالي :
[دورة php - الدرس الأول] - تحضير البرامج و كتابة اول برنامج (http://al79n.com/vb/showthread.php?t=60153)
[دورة php - الدرس الثاني] - المتغيرات و طريقة تعريفها و انواعها و التعامل معها (http://al79n.com/vb/showthread.php?t=60224)
[دورة php - الدرس الثالث] - الجزء الأول : الطباعة المدمجة و تنسيق الصفحات لعرضها (http://al79n.com/vb/showthread.php?t=60243)
[دورة php - الدرس الرابـع] - الجزء الثاني : طباعة المتغيرات في النصوص و بعض الدوال (http://al79n.com/vb/showthread.php?t=60264)
[دورة php - الدرس الخامس] - الثوابت و متغيرات النظام و دوال لا يستغني عنها اي مبرمج (http://al79n.com/vb/showthread.php?t=60306)
[دورة php - الدرس السادس] - الجزء الأول : النماذج و كيفية تصميمها و فوائدها (http://al79n.com/vb/showthread.php?t=60500)
[دورة php - الدرس السابع] - الجزء الثاني : معالجة بيانات النماذج و برمجتها (http://www.al79n.com/vb/showthread.php?t=60629)
[دورة php - الدرس الثامن] - الجزء الثالث : تطبيق عملي للنماذج - اتصل بن (http://www.al79n.com/vb/showthread.php?t=60739)
[دورة php - الدرس التاسع] - الجزء الأول : الجمل الشرطية : if وانواعها (http://www.al79n.com/vb/showthread.php?t=60763)
[دورة php - الدرس العاشر] - الجزء الثاني : الجمل الشرطية : جملة switch (http://www.al79n.com/vb/showthread.php?t=60792)
[دورة php - الدرس الحادي عشر] - الجزء الأول : جمل التكرار و الدوران : for + while (http://www.al79n.com/vb/showthread.php?t=60922)
[دورة php - الدرس الثاني عشر] - الجزء الثاني : تكملة جمل التكرار و تطبيقات عليها (http://www.al79n.com/vb/showthread.php?t=61245)
اما في درسنا اليوم فسوف نبدأ بموضوع جديد و هو المصفوفات التي لا تستغني عنها اي لغة برمجة , اولا لنتعرف ما هي المصفوفات ؟؟ . دعنا نبسط الأمور بعيدا عن البرمجة ثم نعود للبرمجة و الكمبيوتر . لنفرض انك على وشك ان تدعو مجموعة من الأصدقاء لبيتك و اردت ان تقدم لهم التفاح كضيافة وان عدد هؤولاء الأصدقاء 10 وانك في خلال جلوسهم تذهب للسوق و تشتري تفاحة و تسلمها لأحد الضيوف و من ثم تعود للسوق و تشتري تفاحة اخرى و تسلمها لضيف اخر و هكذا حتى تعطي كل الضيوف تفاح ... ألا تلاحظ انك ستهدر وقت طويل في الذهاب و العودة الى السوق 10 مرات ممتالية لتعطي كل ضيف تفاحة عدا عن ذلك فإن الجهد سيكون مضاعفا 10 مرات .. , اما لو انك ذهبت مرة واحدة الى السوق و اشتريت صندوق تفاح (كرتونة , بكسة) فإنك سوف تختصر الوقت و الجهد من 10 مرات الى مرة واحدة و في النهاية انت ستقدم التفاح للضيوف
في تشبيهنا السابق فإن كل مرة ذهبت فيها الى السوق هي متغير لحمل البيانات و الكرتونة هي المصفوفة , والآن دعنا نعود الى البرمجة , تعرف المصفوفات على انها متغيرات مثل متغيرات لغة php لكن الفرق بينها و بين المتغيرات العادية ان المتغير العادي يحمل قيمة واحدة مثل x=1 اما المصفوفة فهي متغير يحمل قيم عديدة
ما هي الفائدة من المصفوفات ؟؟
تخيل ان لديك اسماء اشخاص كثيرين داخل مصفوفه وتريد ان تقوم بترتيب هذه الاسماء من ناحية الاحرف ؟ فهل يمكن فعل ذلك بالمتغيرات ؟ ولكن مع المصفوفات بكتابة كود من 4 احرف يمكن فعل ذلك , غير مسألة الطباعه وغيرها الكثير , لا استطيع حصرها لك الان ولكن سوف توضح كلما تكلمنا عن المصفوفات اكثر.
ما هي انواع المصفوفات ؟؟
المصفوفات نوعين . مصفوفات حرفية و مصفوفات رقمية و هذا التصنيف حسب طريقة استخدام عناصر المصفوفة (index) و سنتكلم عنهم بالتفصيل على مدار الدرس و الدرس القادم و سنبدأ بالمصفوفات الرقمية لأنها تعتبر الأساس
المصفوفات الرقمية : هي مصفوفات نستطيع الوصل الى عناصرها بإستخدام رقم يسمى (index) المصفوفة فمثلا لو اردنا تخزين اسماء 10 طلاب في صف فإن الطريقة العادية ان ننشأ متغير لكل طالب و نخزن به الإسم كالتالي :
http://img530.imageshack.us/img530/3061/55871255.jpg
لاحظ اننا استخدمنا 10 متغيرات اي اننا استهلكنا مساحة كبيرة لكن تخيل لو ان عدد الطلاب الذين تريد تخزينهم هو 500 و ليس 10 !! من الطبيعي انك لن تستخدم 500 متغير لأن اداء البرنامج سوف يصبح صفرا عدا عن التعقيد ولذلك تم ابتكار المصفوفات التي بإمكانها حل السؤال السابق كالتالي :
<?
$students = array("zaed","ali","ahmad","sami","abd","saif","ammar","oday","belal""ra'ad");
?>
وهنا قمنا بتعريف مصفوفة جديدة اسمها students$ وقمنا بتخزين اسماء الطلاب وفصلنا بينهم بفاصلة , يجب ان تلاحظ هنا اننا استخدمنا الكلمة array و هي تدل على ان هذه البيانات التي تليها هي من عناصر هذه المصفوفة و هي تستخدم للإعلان عن تعريف مصفوفة جديدة و يجب ان تعلم ان كل اسم في المصفوفة له رقم لكنه غير مرئي حاليا و سنتطرق له في المواضيع القادمة لكن من المهم ان تعرف ان هذا الرقم يستخدم للوصول الى عناصر المصفوفة وان الترقيم في المصفوفة يبدأ من الرقم صفر (0) ففي مثالنا العنصر الأول في المصفوفة هو "zaed" و رقمه 0 و العنصر الثاني في المصفوفة هو "ali" و رقمه هو 1 و هكذا ..
هناك طريقة اخرى لتعريف المصفوفات في php لاحظ الطريقة التالية :
http://img404.imageshack.us/img404/915/51877155.jpg
هذه نفس المثال السابق بقمنا بتعريف مصفوفة و لاحظ استخدام الأقواس المربعة [] التي تدل على انها مصفوفة و ليس متغير عادي , فائدة هذه الطريقة انها تتيح لنا التحكم بمكان وضع البيانات , فمثلا لو اردنا ان نضع zaed في الموقع الثاني في المصفوفة (تذكر ان المصفوفة تبدأ الترقيم من عند 0 اي اقصد هنا بالموقع الثاني الإندكس رقم 1) فإننا نكتب student[1] = "zaed"
هنا يجب ان نذكر ان المصفوفات تعامل معاملة المتغيرات فمثلا نستطيع ان نجعل مصفوفة = مصفوفة اخرى او اي قيمة اخرى لاحظ المثال التالي :
<?
$students = array("zaed","zaedan","murad","al79n.com");
$new_array = $students;
?>
لاحظ في هذا المثال اننا قمنا بتعريف مصفوفة من 4 عناصر و قمنا بتخزين قيم فيها ثم في السطر الثاني قمنا بعمل متغير جديد اسمه new_array$ و اسندنا اليه اسم المصفوفة students$ اي ان المتغير اصبح مصفوفة و تحمل نفس قيم المصفوفة الأولى ...
كما انه يمكننا التعديل على قيمة معينة في المصفوفة من خلال المفتاح (الرقم) لاحظ المثال التالي :
http://img337.imageshack.us/img337/4224/94218495.jpg
لاحظ انه هناك خطأ في العنصر الثاني في المصفوفة و ان اسمي الصحيح يكتب هكذا zaedan و لاحظ ان موقع هذا العنصر هو 1 كما هو موضح في التعليق في السطر الأول و لنقوم بالتعديل على العنصر فإننا نكتب اسم المصفوفة ثم يتبعها الأقواس المربعة [] و بداخل هذه الأقواس مفتاح العنصر الذي نريد تعديله وهو هنا 1 ثم بعد الأقواس نكتب اشارة المساواة = ثم القيمة الجديدة
والآن نأتي لموضوعنا الأخير في هذا الدرس وهو طباعة المصفوفات الرقمية و هناك عدة طرق
الطريقة الأولى و هي طباعة عناصر المصفوفة حسب المفتاح index واحدة تلو الأخرى لاحظ المثال التالي :
http://img441.imageshack.us/img441/903/27387617.jpg
المثال واضح ولا يحتاج الى شرح و التعليقات بعد كل جملة توصل المعلومة
لكن ماذا لو كانت عناصر المصفوفة كثيرة ؟؟ فهل ستطبع كل عنصر حسب مفتاحه على سطر ؟؟ طبعا لا لأنها ستكون عملية مرهقة لذلك لو فكرنا قليلا سنرى انه بإمكاننا الإستفادة من الدوران لطباعة عناصر المصفوفة لاحظ المثال التالي :
http://img547.imageshack.us/img547/857/66281291.jpg
لاحظ اننا هنا قمنا بتعريف مصفوفة من 6 عناصر [0 - 5] ثم استفدنا من فكرة الدوران لكي يدور على عناصر المصفوفة بالمتغير العداد للدوران i$ هكذا يطبع كل عنصر على سطر
الأن ماذا لو اردنا ان نطبع عناصر مصفوفة كبيرة لا نعلم كم عدد عناصرها ؟؟ ففي المثال السابق كان عدد العناصر معروف لدينا لذلك قمنا بكتابة i < 6 في شرط توقف الدوران , لكن كما قلت ماذا لو كنا لا نعلم عدد العناصر ؟؟
الإجابة بسيطة لأنه php تمدنا بدالة function خاصة لإيجاد عدد عناصر المصفوفة و هي تأخذ معامل واحد وهو اسم المصفوفة لاحظ كيف سنستفيد منها في المثال التالي :
http://img19.imageshack.us/img19/89/88519501.jpg
اولا قمنا بتعريف مصفوفة اسمها names و افترضنا اننا لا نعرف كم عنصر بها
ثم قمنا بتعريف متغير اسمه array_size$ و ثم جعلنا الدالة count تجلب عدد عناصر المصفوفة و تخزنه في هذا المتغير
لاحظ كيف استخدمنا الدالة count فقد كتبنا الدالة ثم مررنا اليها اسم المصفوفة التي نريد عدد عناصرها
ثم عملنا حلقة دوران من عند i = 0 و حددنا شرط التوقف حسب عدد عناصر المصفوفة الذي تم جلبه في السطر السابق و هكذا سيطبع جميع عناصر المصفوفة حسب المفتاح بسطور قليلة ...
بهذا اخوتي ينتهي درسنا اليوم
قد يكون درس يحوي زخما في المعلومات لكنه مهم جدا في عالم برمجيات الويب لذلك ارجوا التركيز
و الى ان نلتقي في الدرس القادم ... :eh_s(17):
http://upload.wikimedia.org/wikipedia/ar/thumb/8/85/%D8%B4%D8%B9%D8%A7%D8%B1_PHP.png/200px-%D8%B4%D8%B9%D8%A7%D8%B1_PHP.png
السلام عليكم و رحمة الله و بركاته .. في بداية الحديث اود الإعتذار عن انقطاع دروس الدورة و ذلك لأمور خارجة عن ارادتي فأرجوا منكم معذرتي , والآن لنعد الى دورتنا , في الدروس السابقة قطعنا شوطا كبيرا في تعلم اساسيات لغة php و تعلمنا الدوران و الطباعة و النماذج و اتخاذ القرار و النصوص و غيرها من الدوال المتفرقة و بإمكانكم متابعة الدروس السابقة من خلال الفهرس التالي :
[دورة php - الدرس الأول] - تحضير البرامج و كتابة اول برنامج (http://al79n.com/vb/showthread.php?t=60153)
[دورة php - الدرس الثاني] - المتغيرات و طريقة تعريفها و انواعها و التعامل معها (http://al79n.com/vb/showthread.php?t=60224)
[دورة php - الدرس الثالث] - الجزء الأول : الطباعة المدمجة و تنسيق الصفحات لعرضها (http://al79n.com/vb/showthread.php?t=60243)
[دورة php - الدرس الرابـع] - الجزء الثاني : طباعة المتغيرات في النصوص و بعض الدوال (http://al79n.com/vb/showthread.php?t=60264)
[دورة php - الدرس الخامس] - الثوابت و متغيرات النظام و دوال لا يستغني عنها اي مبرمج (http://al79n.com/vb/showthread.php?t=60306)
[دورة php - الدرس السادس] - الجزء الأول : النماذج و كيفية تصميمها و فوائدها (http://al79n.com/vb/showthread.php?t=60500)
[دورة php - الدرس السابع] - الجزء الثاني : معالجة بيانات النماذج و برمجتها (http://www.al79n.com/vb/showthread.php?t=60629)
[دورة php - الدرس الثامن] - الجزء الثالث : تطبيق عملي للنماذج - اتصل بن (http://www.al79n.com/vb/showthread.php?t=60739)
[دورة php - الدرس التاسع] - الجزء الأول : الجمل الشرطية : if وانواعها (http://www.al79n.com/vb/showthread.php?t=60763)
[دورة php - الدرس العاشر] - الجزء الثاني : الجمل الشرطية : جملة switch (http://www.al79n.com/vb/showthread.php?t=60792)
[دورة php - الدرس الحادي عشر] - الجزء الأول : جمل التكرار و الدوران : for + while (http://www.al79n.com/vb/showthread.php?t=60922)
[دورة php - الدرس الثاني عشر] - الجزء الثاني : تكملة جمل التكرار و تطبيقات عليها (http://www.al79n.com/vb/showthread.php?t=61245)
اما في درسنا اليوم فسوف نبدأ بموضوع جديد و هو المصفوفات التي لا تستغني عنها اي لغة برمجة , اولا لنتعرف ما هي المصفوفات ؟؟ . دعنا نبسط الأمور بعيدا عن البرمجة ثم نعود للبرمجة و الكمبيوتر . لنفرض انك على وشك ان تدعو مجموعة من الأصدقاء لبيتك و اردت ان تقدم لهم التفاح كضيافة وان عدد هؤولاء الأصدقاء 10 وانك في خلال جلوسهم تذهب للسوق و تشتري تفاحة و تسلمها لأحد الضيوف و من ثم تعود للسوق و تشتري تفاحة اخرى و تسلمها لضيف اخر و هكذا حتى تعطي كل الضيوف تفاح ... ألا تلاحظ انك ستهدر وقت طويل في الذهاب و العودة الى السوق 10 مرات ممتالية لتعطي كل ضيف تفاحة عدا عن ذلك فإن الجهد سيكون مضاعفا 10 مرات .. , اما لو انك ذهبت مرة واحدة الى السوق و اشتريت صندوق تفاح (كرتونة , بكسة) فإنك سوف تختصر الوقت و الجهد من 10 مرات الى مرة واحدة و في النهاية انت ستقدم التفاح للضيوف
في تشبيهنا السابق فإن كل مرة ذهبت فيها الى السوق هي متغير لحمل البيانات و الكرتونة هي المصفوفة , والآن دعنا نعود الى البرمجة , تعرف المصفوفات على انها متغيرات مثل متغيرات لغة php لكن الفرق بينها و بين المتغيرات العادية ان المتغير العادي يحمل قيمة واحدة مثل x=1 اما المصفوفة فهي متغير يحمل قيم عديدة
ما هي الفائدة من المصفوفات ؟؟
تخيل ان لديك اسماء اشخاص كثيرين داخل مصفوفه وتريد ان تقوم بترتيب هذه الاسماء من ناحية الاحرف ؟ فهل يمكن فعل ذلك بالمتغيرات ؟ ولكن مع المصفوفات بكتابة كود من 4 احرف يمكن فعل ذلك , غير مسألة الطباعه وغيرها الكثير , لا استطيع حصرها لك الان ولكن سوف توضح كلما تكلمنا عن المصفوفات اكثر.
ما هي انواع المصفوفات ؟؟
المصفوفات نوعين . مصفوفات حرفية و مصفوفات رقمية و هذا التصنيف حسب طريقة استخدام عناصر المصفوفة (index) و سنتكلم عنهم بالتفصيل على مدار الدرس و الدرس القادم و سنبدأ بالمصفوفات الرقمية لأنها تعتبر الأساس
المصفوفات الرقمية : هي مصفوفات نستطيع الوصل الى عناصرها بإستخدام رقم يسمى (index) المصفوفة فمثلا لو اردنا تخزين اسماء 10 طلاب في صف فإن الطريقة العادية ان ننشأ متغير لكل طالب و نخزن به الإسم كالتالي :
http://img530.imageshack.us/img530/3061/55871255.jpg
لاحظ اننا استخدمنا 10 متغيرات اي اننا استهلكنا مساحة كبيرة لكن تخيل لو ان عدد الطلاب الذين تريد تخزينهم هو 500 و ليس 10 !! من الطبيعي انك لن تستخدم 500 متغير لأن اداء البرنامج سوف يصبح صفرا عدا عن التعقيد ولذلك تم ابتكار المصفوفات التي بإمكانها حل السؤال السابق كالتالي :
<?
$students = array("zaed","ali","ahmad","sami","abd","saif","ammar","oday","belal""ra'ad");
?>
وهنا قمنا بتعريف مصفوفة جديدة اسمها students$ وقمنا بتخزين اسماء الطلاب وفصلنا بينهم بفاصلة , يجب ان تلاحظ هنا اننا استخدمنا الكلمة array و هي تدل على ان هذه البيانات التي تليها هي من عناصر هذه المصفوفة و هي تستخدم للإعلان عن تعريف مصفوفة جديدة و يجب ان تعلم ان كل اسم في المصفوفة له رقم لكنه غير مرئي حاليا و سنتطرق له في المواضيع القادمة لكن من المهم ان تعرف ان هذا الرقم يستخدم للوصول الى عناصر المصفوفة وان الترقيم في المصفوفة يبدأ من الرقم صفر (0) ففي مثالنا العنصر الأول في المصفوفة هو "zaed" و رقمه 0 و العنصر الثاني في المصفوفة هو "ali" و رقمه هو 1 و هكذا ..
هناك طريقة اخرى لتعريف المصفوفات في php لاحظ الطريقة التالية :
http://img404.imageshack.us/img404/915/51877155.jpg
هذه نفس المثال السابق بقمنا بتعريف مصفوفة و لاحظ استخدام الأقواس المربعة [] التي تدل على انها مصفوفة و ليس متغير عادي , فائدة هذه الطريقة انها تتيح لنا التحكم بمكان وضع البيانات , فمثلا لو اردنا ان نضع zaed في الموقع الثاني في المصفوفة (تذكر ان المصفوفة تبدأ الترقيم من عند 0 اي اقصد هنا بالموقع الثاني الإندكس رقم 1) فإننا نكتب student[1] = "zaed"
هنا يجب ان نذكر ان المصفوفات تعامل معاملة المتغيرات فمثلا نستطيع ان نجعل مصفوفة = مصفوفة اخرى او اي قيمة اخرى لاحظ المثال التالي :
<?
$students = array("zaed","zaedan","murad","al79n.com");
$new_array = $students;
?>
لاحظ في هذا المثال اننا قمنا بتعريف مصفوفة من 4 عناصر و قمنا بتخزين قيم فيها ثم في السطر الثاني قمنا بعمل متغير جديد اسمه new_array$ و اسندنا اليه اسم المصفوفة students$ اي ان المتغير اصبح مصفوفة و تحمل نفس قيم المصفوفة الأولى ...
كما انه يمكننا التعديل على قيمة معينة في المصفوفة من خلال المفتاح (الرقم) لاحظ المثال التالي :
http://img337.imageshack.us/img337/4224/94218495.jpg
لاحظ انه هناك خطأ في العنصر الثاني في المصفوفة و ان اسمي الصحيح يكتب هكذا zaedan و لاحظ ان موقع هذا العنصر هو 1 كما هو موضح في التعليق في السطر الأول و لنقوم بالتعديل على العنصر فإننا نكتب اسم المصفوفة ثم يتبعها الأقواس المربعة [] و بداخل هذه الأقواس مفتاح العنصر الذي نريد تعديله وهو هنا 1 ثم بعد الأقواس نكتب اشارة المساواة = ثم القيمة الجديدة
والآن نأتي لموضوعنا الأخير في هذا الدرس وهو طباعة المصفوفات الرقمية و هناك عدة طرق
الطريقة الأولى و هي طباعة عناصر المصفوفة حسب المفتاح index واحدة تلو الأخرى لاحظ المثال التالي :
http://img441.imageshack.us/img441/903/27387617.jpg
المثال واضح ولا يحتاج الى شرح و التعليقات بعد كل جملة توصل المعلومة
لكن ماذا لو كانت عناصر المصفوفة كثيرة ؟؟ فهل ستطبع كل عنصر حسب مفتاحه على سطر ؟؟ طبعا لا لأنها ستكون عملية مرهقة لذلك لو فكرنا قليلا سنرى انه بإمكاننا الإستفادة من الدوران لطباعة عناصر المصفوفة لاحظ المثال التالي :
http://img547.imageshack.us/img547/857/66281291.jpg
لاحظ اننا هنا قمنا بتعريف مصفوفة من 6 عناصر [0 - 5] ثم استفدنا من فكرة الدوران لكي يدور على عناصر المصفوفة بالمتغير العداد للدوران i$ هكذا يطبع كل عنصر على سطر
الأن ماذا لو اردنا ان نطبع عناصر مصفوفة كبيرة لا نعلم كم عدد عناصرها ؟؟ ففي المثال السابق كان عدد العناصر معروف لدينا لذلك قمنا بكتابة i < 6 في شرط توقف الدوران , لكن كما قلت ماذا لو كنا لا نعلم عدد العناصر ؟؟
الإجابة بسيطة لأنه php تمدنا بدالة function خاصة لإيجاد عدد عناصر المصفوفة و هي تأخذ معامل واحد وهو اسم المصفوفة لاحظ كيف سنستفيد منها في المثال التالي :
http://img19.imageshack.us/img19/89/88519501.jpg
اولا قمنا بتعريف مصفوفة اسمها names و افترضنا اننا لا نعرف كم عنصر بها
ثم قمنا بتعريف متغير اسمه array_size$ و ثم جعلنا الدالة count تجلب عدد عناصر المصفوفة و تخزنه في هذا المتغير
لاحظ كيف استخدمنا الدالة count فقد كتبنا الدالة ثم مررنا اليها اسم المصفوفة التي نريد عدد عناصرها
ثم عملنا حلقة دوران من عند i = 0 و حددنا شرط التوقف حسب عدد عناصر المصفوفة الذي تم جلبه في السطر السابق و هكذا سيطبع جميع عناصر المصفوفة حسب المفتاح بسطور قليلة ...
بهذا اخوتي ينتهي درسنا اليوم
قد يكون درس يحوي زخما في المعلومات لكنه مهم جدا في عالم برمجيات الويب لذلك ارجوا التركيز
و الى ان نلتقي في الدرس القادم ... :eh_s(17):