المصفوفات في PHP: المرقمة والترابطية
في المتغيرات العادية تخزّن قيمة واحدة. لكن ماذا لو أردت تخزين أسماء 30 طالباً، أو كل منتجات سلة المشتريات؟ هنا تحتاج المصفوفات (Arrays). وفي PHP بالذات، المصفوفات هي أهم بنية بيانات على الإطلاق: بيانات النماذج تصلك كمصفوفة، ونتائج قاعدة البيانات تصلك كمصفوفة. لذلك أتقن هذا الدرس جيداً.
المصفوفة المرقمة
Section titled “المصفوفة المرقمة”مجموعة قيم مرتبة، وكل قيمة لها رقم (Index) يبدأ من صفر:
<?php$colors = ["أحمر", "أخضر", "أزرق"];
echo $colors[0] . "\n";echo $colors[2] . "\n";echo count($colors) . "\n";أحمرأزرق3تخيّلها مثل صف من الخزائن في المدرسة: كل خزانة لها رقم، وأول خزانة رقمها صفر. و count تخبرك بعدد الخزائن.
الإضافة والتعديل
Section titled “الإضافة والتعديل”<?php$colors[] = "أصفر"; // أضف في النهايةarray_push($colors, "أسود"); // طريقة أخرى للإضافة$colors[1] = "بنفسجي"; // عدّل العنصر رقم 1
print_r($colors);Array( [0] => أحمر [1] => بنفسجي [2] => أزرق [3] => أصفر [4] => أسود)print_r تعرض المصفوفة كاملة بشكل مقروء، وهي ممتازة لفحص محتوى المصفوفات أثناء التجربة.
المصفوفة الترابطية
Section titled “المصفوفة الترابطية”بدلاً من الأرقام، يمكنك أن تعطي كل قيمة اسماً (مفتاحاً - Key). هذه تسمى المصفوفة الترابطية (Associative Array)، وهي مثل بطاقة شخصية فيها حقول لها أسماء:
<?php$student = [ "name" => "سارة", "age" => 14, "city" => "الإسكندرية",];
echo $student["name"] . " من " . $student["city"] . "\n";
$student["grade"] = "الثاني الإعدادي"; // إضافة مفتاح جديدecho count($student);سارة من الإسكندرية4- الرمز
=>يربط المفتاح بقيمته. - الفاصلة بعد آخر عنصر مسموحة في PHP، وتسهّل إضافة عناصر جديدة لاحقاً.
- إذا كتبت مفتاحاً غير موجود ستُنشئه، وإذا كان موجوداً ستعدّل قيمته.
المرور بـ foreach
Section titled “المرور بـ foreach”تعرفت على foreach في درس الحلقات. ومع المصفوفة الترابطية تستطيع أخذ المفتاح والقيمة معاً:
<?phpforeach ($student as $key => $value) { echo "$key: $value\n";}name: سارةage: 14city: الإسكندريةgrade: الثاني الإعداديأهم دوال المصفوفات
Section titled “أهم دوال المصفوفات”<?php$nums = [5, 3, 9, 1];
sort($nums); // ترتيب تصاعديecho implode(", ", $nums) . "\n";
rsort($nums); // ترتيب تنازليecho implode(", ", $nums) . "\n";
var_dump(in_array(9, $nums)); // هل القيمة موجودة؟echo array_sum($nums) . "\n"; // المجموع1, 3, 5, 99, 5, 3, 1bool(true)18implode(", ", $arr): تجمع العناصر في نص واحد بينها فاصل.explode(",", $text): العكس تماماً، تقطع النص إلى مصفوفة:
<?php$tags = explode(",", "php,html,css");print_r($tags);Array( [0] => php [1] => html [2] => css)المصفوفات المتداخلة
Section titled “المصفوفات المتداخلة”يمكن أن تكون قيمة عنصر في المصفوفة مصفوفة أخرى. وهذا هو شكل البيانات التي ستأتيك من قاعدة البيانات بالضبط: قائمة صفوف، وكل صف مصفوفة ترابطية:
<?php$students = [ ["name" => "أحمد", "score" => 85], ["name" => "منى", "score" => 92], ["name" => "عمر", "score" => 78],];
foreach ($students as $s) { echo $s["name"] . ": " . $s["score"] . "\n";}
echo $students[1]["name"];أحمد: 85منى: 92عمر: 78منىلاحظ $students[1]["name"]: الرقم الأول يختار الطالب الثاني، والمفتاح يختار اسمه. ويمكنك استخراج عمود كامل بـ array_column:
<?php$scores = array_column($students, "score");echo "المتوسط: " . round(array_sum($scores) / count($scores), 1);المتوسط: 85جرّب بنفسك
Section titled “جرّب بنفسك”هذه سلة مشتريات: المفتاح اسم المنتج، والقيمة سعره. اطبع كل منتج بسعره، ثم احسب الإجمالي:
<?php$cart = ["قلم" => 5, "كراسة" => 15, "مسطرة" => 7];$total = 0;
foreach ($cart as $item => $price) { echo "$item: $price جنيه\n"; $total += $price;}
echo "الإجمالي: $total جنيه\n";قلم: 5 جنيهكراسة: 15 جنيهمسطرة: 7 جنيهالإجمالي: 27 جنيهتحدٍّ: أضف منتجاً جديداً للسلة، وحاول حساب الإجمالي بدالة واحدة بدل الحلقة (تلميح: array_sum).
أخطاء شائعة
Section titled “أخطاء شائعة”- نسيان أن العد يبدأ من صفر: أول عنصر
$arr[0]وليس$arr[1]، وآخر عنصر رقمهcount($arr) - 1. - قراءة مفتاح غير موجود: يعطي تحذيراً
Undefined array key. افحص أولاً بـisset($arr["key"])أو استخدم$arr["key"] ?? "قيمة افتراضية". - طباعة المصفوفة بـ echo:
echo $colors;تطبع كلمةArrayفقط مع تحذير. استخدمprint_rأوimplodeأو حلقة.
اختبر نفسك
Section titled “اختبر نفسك”سؤال
إذا كان $a = ['x', 'y', 'z']; فما قيمة $a[1]؟
الترقيم يبدأ من صفر: $a[0] هو x، و $a[1] هو y.
سؤال
أي دالة تحوّل المصفوفة إلى نص واحد بين عناصره فاصل؟
implode تجمع العناصر في نص، و explode تفعل العكس وتقطع النص إلى مصفوفة.
الخلاصة
Section titled “الخلاصة”- المصفوفة المرقمة تبدأ من الصفر، والترابطية تستخدم مفاتيح بأسماء مع
=>. $arr[] = ...للإضافة، وcountللعدد، وprint_rللفحص.foreach ($arr as $key => $value)تمر على المفاتيح والقيم معاً.sortوin_arrayوarray_sumوimplodeوexplodeمن أهم الدوال.- المصفوفات المتداخلة هي شكل بيانات قاعدة البيانات: قائمة صفوف، وكل صف مصفوفة ترابطية.