المصفوفات في PHP

🔹 ما هي المصفوفة؟

المصفوفة هي متغير واحد يمكنه تخزين أكثر من قيمة بداخله، بدلاً من إنشاء متغير لكل قيمة.

مثال بسيط:

$student1 = "ياسين";
$student2 = "سارة";
$student3 = "كريم";
PHP

📌 هذا غير عملي، الحل الأفضل:

$students = ["ياسين", "سارة", "كريم"];
PHP
✅ فوائد المصفوفات:
الفائدةالشرح
🔸 تخزين مجموعة من القيم في متغير واحد
🔸 سهولة التكرار والتحكم بالقيم
🔸 أساس قوي لمعالجة البيانات الكبيرة
🔸 تستخدم مع قواعد البيانات، JSON، النماذج…
🔸 تسهل البرمجة النظيفة والمنظمة
⚠️ محاذير عند استخدام المصفوفات:
المحذورالشرح
❌ استخدام أنواع مختلفة داخل مصفوفة بدون داعٍ
❌ نسيان الفهرس عند التعامل مع البيانات
❌ الخلط بين أنواع المصفوفات (ترابطية ومفهرسة)
❌ الكتابة فوق القيم دون قصد
❌ استخدام دوال الترتيب بدون فهم المفاتيح
🧱 أنواع المصفوفات في PHP
1️⃣ Indexed Arrays – المصفوفات المفهرسة (بالأرقام)

📌 يتم الوصول للعناصر باستخدام أرقام تبدأ من 0.

✅ طريقة الإنشاء:

// طريقة 1
$colors = array("أحمر", "أخضر", "أزرق");

// طريقة 2 (الأحدث)
$colors = ["أحمر", "أخضر", "أزرق"];
PHP

✅ الوصول للقيم:

echo $colors[0]; // أحمر
echo $colors[2]; // أزرق
PHP
✅ التكرار باستخدام foreach:
foreach($colors as $color) {
    echo $color . "<br>";
}
PHP
2️⃣ Associative Arrays – المصفوفات الترابطية (مفاتيح نصية)

📌 كل عنصر له مفتاح (Key) مخصص بدل الرقم.

✅ الإنشاء:

$person = [
    "name" => "ياسين",
    "age" => 25,
    "city" => "دمشق"
];
PHP

✅ الاستخدام:

echo $person["name"]; // ياسين
echo $person["age"]; // 25
PHP

✅ التكرار:

foreach($person as $key => $value) {
    echo "$key: $value<br>";
}
PHP
3️⃣ Multidimensional Arrays – المصفوفات متعددة الأبعاد

📌 مصفوفة بداخل مصفوفة (مثل جدول أو بيانات مركبة).

✅ مثال:
$students = [
    ["ياسين", 90, "علوم"],
    ["سارة", 85, "رياضيات"],
    ["كريم", 92, "لغة"]
];
PHP
✅ الوصول إلى عنصر:
echo $students[0][0]; // ياسين
echo $students[2][1]; // 92
PHP
✅ التكرار المزدوج:
foreach($students as $student) {
    foreach($student as $info) {
        echo $info . " | ";
    }
    echo "<br>";
}
PHP
🎯 مقارنة بين الأنواع الثلاثة:
النوعمثال الوصولالشكل
مفهرسة$arr[0][قيمة1, قيمة2, …]
ترابطية$arr["name"][“name” => قيمة]
متعددة$arr[0][1][[قيمة1, قيمة2], […]]
🧠 استخدامات المصفوفات في مشاريع حقيقية:
السيناريونوع المصفوفة المستخدم
قائمة أسماء – studentsIndexed
بيانات مستخدم – name, emailAssociative
نتائج طلاب – مصفوفة بداخلها بيانات طالبMultidimensional
JSON API DataMultidimensional & Associative
معالجة نتائج بحث أو نماذجAssociative
✅ مثال تطبيقي شامل:
$users = [
    [
        "name" => "ياسين",
        "email" => "[email protected]"
    ],
    [
        "name" => "نور",
        "email" => "[email protected]"
    ]
];

foreach($users as $user) {
    echo "الاسم: " . $user["name"] . "<br>";
    echo "البريد: " . $user["email"] . "<hr>";
}
PHP
3️⃣ كيفية إنشاء المصفوفات (Create Arrays)
🔹 الطريقة التقليدية:
$colors = array("أحمر", "أخضر", "أزرق");
PHP
🔹 الطريقة الأحدث (من PHP 5.4):
$colors = ["أحمر", "أخضر", "أزرق"];
PHP

ملاحظة: كلا الطريقتين صحيحتين، لكن نستخدم الطريقة الأحدث [] لسهولتها وانتشارها.

4️⃣ الوصول إلى العناصر (Accessing Elements)
✅ المصفوفة المفهرسة:
$colors = ["أحمر", "أخضر", "أزرق"];
echo $colors[0]; // أحمر
echo $colors[2]; // أزرق
PHP
✅ المصفوفة الترابطية:
$user = [
    "name" => "ياسين",
    "age" => 25
];
echo $user["name"]; // ياسين
PHP

⚠️ محذور: محاولة الوصول لمفتاح غير موجود يعطي خطأ من نوع Notice.

5️⃣ تعديل القيم داخل المصفوفة (Modify Elements)
✅ تعديل عنصر في مصفوفة مفهرسة:
$colors = ["أحمر", "أخضر", "أزرق"];
$colors[1] = "أصفر";
print_r($colors);
// النتيجة: ["أحمر", "أصفر", "أزرق"]
PHP
✅ تعديل قيمة بمفتاح ترابطي:
$user = ["name" => "ياسين", "age" => 25];
$user["age"] = 26;
PHP

الفائدة: تعديل القيم ديناميكيًا دون إعادة إنشاء المصفوفة.

6️⃣ إضافة عناصر للمصفوفة (Add Elements)
✅ المصفوفة المفهرسة:
$colors = ["أحمر", "أخضر"];
$colors[] = "أزرق"; // يضيف في نهاية المصفوفة
PHP

أو باستخدام array_push():

array_push($colors, "أسود", "أبيض");
PHP
✅ المصفوفة الترابطية:
$user["email"] = "[email protected]";
PHP

⚠️ محذور: إذا أضفت نفس المفتاح سيُستبدل، لا يُضاف مرتين.

7️⃣ حذف العناصر من المصفوفة (Remove Elements)
✅ باستخدام unset():
$colors = ["أحمر", "أخضر", "أزرق"];
unset($colors[1]); // يحذف "أخضر"
PHP

⚠️ المفتاح لا يُعاد ترتيبه تلقائيًا!

✅ حذف عنصر من مصفوفة ترابطية:
unset($user["email"]);
PHP
✅ إعادة ترتيب المفاتيح بعد الحذف (للمصفوفات المفهرسة):
$colors = array_values($colors);
PHP

🎯 نصيحة: استخدم array_splice() للحذف وإعادة الترتيب بسهولة.

8️⃣ التكرار على المصفوفات (Looping Arrays)
✅ باستخدام foreach (الأكثر شيوعًا):
$colors = ["أحمر", "أخضر", "أزرق"];
foreach($colors as $color) {
    echo $color . "<br>";
}
PHP

✅ مع المفاتيح:

foreach($user as $key => $value) {
    echo "$key: $value<br>";
}
PHP
✅ باستخدام for (مع المصفوفات المفهرسة):
$colors = ["أحمر", "أخضر", "أزرق"];
for ($i = 0; $i < count($colors); $i++) {
    echo $colors[$i] . "<br>";
}
PHP

🎯 ملاحظة: count() يُحسب كل مرة، والأفضل تخزينه في متغير لتوفير الأداء.

✅ باستخدام while:
$i = 0;
while ($i < count($colors)) {
    echo $colors[$i] . "<br>";
    $i++;
}
PHP
📌 خلاصة الفروقات بين التكرار:
الطريقةالأفضلية
foreachالأفضل للقراءة والتكرار على كل العناصر
forمفيد عندما تحتاج فهرسة
whileعندما لا تعرف عدد التكرارات أو تحتاج شروطًا ديناميكية
✅ تطبيق شامل:
$students = [
    "ياسين" => 90,
    "سارة" => 85,
    "كريم" => 95
];

foreach ($students as $name => $grade) {
    echo "$name حصل على $grade درجة<br>";
}
PHP