بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته..
أهلاً وسهلاً بكم في الجزء الثاني من شرح مصفوفة (array).. كان الجزء الأول من الدرس يتكلم عن المصفوفة (array) أحادية البعد..
أما هذا الجزء فيتكلم عن (array).. ثنائية البعد..
قبل أن أبدأ بالدرس..
# توضيح للألوان في الصور التوضيحية في الدروس المتبقية :
- اللون الأحمر : مصفوفة تقع في البعد الأول..
- اللون الأخضر : مصفوفة تقع في البعد الثاني..
- اللون البرتقالي : مصفوفة تقع في البعد الثالث..
- اللون الوردي : مصفوفة تقع في البعد الرابع..
- اللون الأزرق : قيم المصفوفات في جميع الأبعاد..
بسم الله نبدأ هذا الدرس..
هناك بعض الأخطاء الشائعة في المنتديات العربية في كثير من أمور البرمجة بعض الأخطاء بسيط لا يضر..
وبعضها قوي قد يضر بالمبرمج وعمله في البرمجه..
مثال : لخطأ من الأخطاء البسيطة..

من الأخطاء الشائعة أن يسمي البعض (array) دالة.. وفي الحقيقة أنها مصفوفة.. لها نظام خاص (فهارس - قيم - مصفوفات أخرى) تتغير حسب كيف المبرمج..
ولكن هذا الخطأ بسيط والتسمية لا تضر بشيء في البرمجة..
أما الأخطاء التي تضر بالبرمجة ولله الحمد قليلة في مجتمعنا العربي..
مثال : لخطأ مضر..

في الحقيقة أن جميع المصفوفات الموجودة في الكود هي مصفوفات أحادية البعد..
ولكن الجزء الأول للفهرس من كل متغير في أمر الطباعة.. في الحقيقة هو جزء من اسم المتغير..وليس فهرس..
الكتاب ذكر القاعدة صحيحة (الطبخة كلها احتواء مصفوفة من النوع Variant على عدة مصفوفات)..
لكن الخطأ كان في التوضيح بالأكواد..
وسنعرف اليوم بإذن الله كيف نستخدم مصفوفة (array) ثنائية البعد..
وسيصحبنا في الأمثلة.. مثالنا في الدرس السابق..
- المصفوفة ثنائية البعد :
في هذا النوع من المصفوفات لا يمكن أن نستخدم كلمة (array) مرة واحدة.. لا بد أن تكون مرتين أو أكثر..
نأتي بمصفوفة (array) عادية.. ثم نجعل بداخلها مصفوفات (array) أخرى بدل القيم..
ونضع بداخل هذه المصفوفات القيم.. وبهذه الصورة لا يمكن أن تطبع قيمة إلا باستخدام فهرسين (بعدين).. لا تقل ولا تزيد..
مثال : لأسهل مصفوفة ثنائية البعد :
كود PHP:
a = Array(Array("السعودية", "مصر", "سوريا", "الكويت", "اليمن"), Array(30, 100, 23, 1, 20))
بالنظرة الأولى أعتقد أنك لم تفهم الطبخة.. وأعتقد أن هناك سؤال في عقلك (كيف ثنائية بعد وأنا استخدمت مصفوفة (array) ثلاث مرات..؟؟!!)
هل نسيت القانون الذي أعطيتك إياه (في هذا النوع من المصفوفات لا يمكن أن نستخدم كلمة (array) مرة واحدة.. لا بد أن تكون مرتين أو أكثر..)
السؤال الأهم : كم من الفهارس سأحتاج لكي أطبع أبعد قيمة في المصفوفة..؟
الجواب :في كل الأحوال ستحتاج فهرسين لا أقل ولا أكثر.. لطباعة أي قيمة في هذه المصفوفة..
صورة توضيحية لكود المصفوفة مع فهارسها..

أعتقد أنها تفي بالغرض.. وأعتقد أن الكود أصبح الآن واضحاً.. ومع هذا سأوضحه أكثر ^__^..
الآن أريد أن أطبع كلمة (السعودية)..كيف..؟
طبيعي : أكتب اسم المتغير اللي في الكود اللي هو (a).. والفهرس بين قوسين.. كما في الدرس السابق..
هكذا a(0).. لكن هذا الفهرس لن يطبع لي أي قيمة.. لأنه سينقلنا إلى مصفوفة (array) أخرى.. كما في الصورة أمامك..
وبالتالي أحتاج إلى بعد آخر (فهرس آخر) للوصول إلى القيمة التي أريدها وهي (السعودية).. سيكون هكذا a(0)(0)..
وسيصبح الكود بهذه الصورة :
كود PHP:
Dim a As Variant
a = Array(Array("السعودية", "مصر", "سوريا", "الكويت", "اليمن"), Array(30, 100, 23, 1, 20))
Text1 = a(0)(0)
سيطبع لك البرنامج كلمة (السعودية).. ولطباعة عدد سكان السعودية ما عليك سوى تغيير رقم الفهرس الأول إلى 1..
هكذا a(1)(0).. لتنتقل إلى قيم المصفوفة الثانية..
وهذا الكود لطباعة كل القيم.. الدول مع عدد سكانها..
كود PHP:
Dim a As Variant
a = Array(Array("السعودية", "مصر", "سوريا", "الكويت", "اليمن"), Array(30, 100, 23, 1, 20))
For i = 0 To 4 Step 1
Text1 = Text1 & a(0)(i) & vbNewLine
Text2 = Text2 & a(1)(i) & vbNewLine
Next i
ستلاحظ أن عدد السكان بدون عبارة(مليون نسمة).. سيأتي الكلام عنها.. لم أنسها ^__^..
أعتقد أن الصورة أصبحت واضحة.. ولكن هناك سؤال مهم..أريد أن أصنع مصفوفة.. تحتوي على مصفوفة واحدة بداخلها والباقي قيم..
هل أستطيع فعل ذلك..؟! نعم تستطيع.. بهذه الصورة..

ولاحظ أن أسماء الدول لن نحتاج سوى فهرس واحد لطباعة اسم كل دولة.. لأنها في البعد الأول من المصفوفة..
أما عدد سكان تلك الدول لابد من استخدام فهرسين لتحديد سكان كل دولة.. لأن عدد السكان يقع في البعد الثاني من المصفوفة..
وهي المصفوفة التي تقع في الفهرس رقم (5).. والتي أعطت بعداً آخر للمصفوفة..
سيكون الكود هكذا :
كود PHP:
Dim a As Variant
a = Array("السعودية", "مصر", "سوريا", "الكويت", "اليمن", Array(30, 100, 23, 1, 20))
For i = 0 To 4 Step 1
Text1 = Text1 & a(i) & vbNewLine
Text2 = Text2 & a(5)(i) & vbNewLine
Next i
سؤال :من أي نوع هذه المصفوفة.. توجد فيها قيم لها بعد واحد وأخرى قيم لها بعدين..؟
الجواب : مصفوفة ثنائية البعد.. لأنك تتكلم عن البعد أي أبعد قيمة فيها.. وأبعد قيمة هنا قيمة تحتاج إلى فهرسين (بعدين).. لذلك هي ثنائية البعد..
الآن أعتقد أنني أستطيع أن أضيف عبارة (مليون نسمة) للمصفوفة دون أن تتلخبط المعلومات لديك.. لأنها بنفس الطريقة..
هكذا :
كود PHP:
a = Array("السعودية", "مصر", "سوريا", "الكويت", "اليمن", Array(30, 100, 23, 1, 20), " مليون نسمة")
سؤال مهم : العبارة (مليون نسمة) في أي بعد.. انتبه تقول لي في البعد الثاني أو الثالث.. لا تلخبط..؟؟!!
انتبه ترى العبارة (مليون نسمة) في البعد الأول من المصفوفة.. لأنه لا يمكن توصلها إلا بعد ما تطلع من المصفوفة الثانية (البعد الثاني)..
وترجع في مسار المصفوفة الأولى (البعد الأول)..
صورة توضيحية للمصفوفة :

أعتقد أنها أصبحت واضحة..
وهذا الكود أكبر دليل.. وشوف كم فهرس استخدمت علشان أصل لعبارة (مليون نسمة)..
كود PHP:
Dim a As Variant
a = Array("السعودية", "مصر", "سوريا", "الكويت", "اليمن", Array(30, 100, 23, 1, 20), " مليون نسمة")
For i = 0 To 4 Step 1
Text1 = Text1 & a(i) & vbNewLine
Text2 = Text2 & a(5)(i) & a(6) & vbNewLine
Next i
أمر آخر مهم : انتبه تشوف عدد المصفوفات كثير وتحدد على إثرها أبعاد المصفوفة..
هذا الكود للمصفوفة مثلاً :
كود PHP:
a = Array(Array("السعودية", 30), Array("مصر", 100), Array("سوريا", 23), Array("الكويت", 1), Array("اليمن", 20), " مليون نسمة")
انتبه تقولي أن هذي المصفوفة هي مصفوفة متعددة الأبعاد (ثلاثية أو رباعية أو خماسية... إلخ)..
ركز كل القيم اللي فيها تحتاج فهرسين (بعدين) لطباعتها.. ما عدا الأخيرة في البعد الأول..
صورة توضيحية :

إن شاء الله وضحت لك الصورة..
أمر آخر برضه مهم ^_^ :
المصفوفة (Array) مرنة مرونة عالية وبصورة جميلة جداً.. وفي جميع لغات البرمجة..
بإمكانك أن تستخدم مصفوفة (Array) بدايتها قيم ونهايتها مصفوفات.. أو العكس بدايتها مصفوفات ونهايتها قيم..
وكذلك بإمكانك أن تستخدم مصفوفة (Array) بدايتها قيم ومنتصفها مصفوفات ونهايتها قيم..
وكل قيمة تصل لها حسب فهرسها.. والصور التوضيحية السابقة تبين لك ذلك..
هذا بالنسبة للمصفوفة (Array) ثنائية البعد.. وأتمنى أن أكون قد رويت فضولك عنها..
وانتظروني في الجزء الثالث والأخير.. قريباً إن شاء الله..
بقلم : مزيد..مرير