في هذا الدرس 6تصفّح المواضيع
بينما تعتمد المصفوفة المفهرسة على الأرقام المتسلسلة، تستخدم المصفوفة الترابطية (Associative Array) مفاتيح نصية وصفية للوصول إلى القيم، تماماً مثل القاموس أو جدول التجزئة (Hash Map):
- وضوح دلالة البيانات: بدلاً من محاولة تذكر ماذا يعني العنصر
$user[2]، يمكنك قراءة$user["email"]بوضوح تام. - الحفاظ على ترتيب الإدخال: تتميز مصفوفات PHP بأنها تحفظ المفاتيح بنفس الترتيب الزمني الذي أُضيفت به.
<?php
$article = [
"slug" => "php-associative-arrays",
"views" => 1450,
"active" => true,
];
echo $article["slug"] . " (" . $article["views"] . ")";
نستخدم معامل السهم المزدوج (=>) داخل الأقواس المربعة [...] لربط كل مفتاح نصي بقيمته المقابلة:
- التمييز عن سهم الكائنات: يُكتب سهم المصفوفة بعلامة يساوي متبوعة بعلامة أكبر من (
=>). - قاعدة تفرد المفاتيح: يجب أن يكون كل مفتاح فريداً داخل المصفوفة؛ وإذا تكرر نفس المفتاح مرتين، فإن القيمة الأخيرة تستبدل القيمة الأولى تلقائياً.
<?php
$config = [
"app_name" => "CloseTag",
"timezone" => "UTC",
"debug" => false,
];
var_dump($config);
تتم قراءة قيمة مفتاح أو تعديلها أو إضافة مفتاح جديد تماماً عبر نفس صياغة الإسناد بالأقواس المربعة $array["key"] = $value;:
- إذا كان المفتاح موجوداً مسبقاً: يُحدّث محرك PHP قيمته في نفس موضعه دون تغيير ترتيب المفاتيح.
- إذا كان المفتاح جديداً: يضيف محرك PHP الزوج الجديد (المفتاح والقيمة) في نهاية المصفوفة الترابطية.
<?php
$product = [
"sku" => "KB-900",
"price" => 120.00,
];
// Update existing key & add a new key:
$product["price"] = 99.50;
$product["stock"] = 15;
echo $product["sku"] . ": $" . $product["price"] . " (" . $product["stock"] . ")";
لفحص وجود مفتاح داخل مصفوفة ترابطية قبل قراءته، توفر لغة PHP طريقتين أساسيتين يختلف سلوكهما عندما تكون قيمة المفتاح null:
- البنية
isset($arr["key"]): تُرجعtrueفقط إذا كان المفتاح موجوداً وكانت قيمته لا تساويnull. - الدالة
array_key_exists("key", $arr): تُرجعtrueبمجرد وجود المفتاح داخل المصفوفة حتى لو كانت قيمته المخزنة هيnull(وهو أمر شائع في سجلات قواعد البيانات).
<?php
$row = [
"id" => 42,
"deleted_at" => null,
];
var_dump(isset($row["deleted_at"])); // bool(false)
var_dump(array_key_exists("deleted_at", $row)); // bool(true)
لحذف مفتاح وقيمته نهائياً من المصفوفة، نمرر العنصر إلى البنية المدمجة unset($array["key"]):
- إزالة كاملة للمفتاح: إسناد القيمة
$arr["k"] = null;يُبقي المفتاح موجوداً داخل المصفوفة، بينما تقومunset($arr["k"]);بمسح المفتاح تماماً فينقص طول المصفوفةcount($arr)بمقدار واحد. - حذف عدة مفاتيح معاً: يمكنك تمرير أكثر من مفتاح في استدعاء واحد مثل
unset($user["password"], $user["token"]);.
<?php
$account = [
"id" => 10,
"email" => "[email protected]",
"password_hash" => "secret_hash",
];
unset($account["password_hash"]);
echo "Keys left: " . count($account);
يقارن الجدول المرجعي التالي بين المصفوفة المفهرسة والمصفوفة الترابطية في PHP 8.4:
| وجه المقارنة | المصفوفة المفهرسة (Indexed) | المصفوفة الترابطية (Associative) |
|---|---|---|
| نوع المفاتيح | أعداد صحيحة متسلسلة (0, 1, 2...) | مفاتيح نصية وصفية ("id", "email") |
| صياغة الإنشاء | ["PHP", "CSS", "JS"] | ["lang" => "PHP", "ver" => 8] |
| الاستخدام الأمثل | قوائم العناصر المتماثلة المرتبة | تمثيل سجل بيانات مهيكل أو إعدادات النظام |
| فحص وجود المفتاح | isset($a[0]) أو $a[0] ?? null | array_key_exists("k", $a) أو isset($a["k"]) |
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
أتقنت في هذا الدرس بنية المصفوفات الترابطية في PHP، واستخدام معامل السهم المزدوج =>، وقراءة وتعديل المفاتيح النصية، والفرق الدقيق بين isset() وarray_key_exists() مع القيم الفارغة null، وحذف المفاتيح عبر unset(). الخطوة التالية: انتقل إلى الدرس الثاني والعشرين «تكرار عناصر المصفوفات عبر حلقة foreach في PHP» للدوران على المفاتيح والقيم بسلاسة.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 Associative Arrays المصفوفات الترابطية
- تعلّم المصفوفات الترابطية بنظام المفتاح والقيمة في PHP بأسلوب PHP 8 الحديث مع أمثلة عملية وتطبيقات تفاعلية.
- للمراجعة
- 02 Key Value Pairs Architecture معمارية المفتاح والقيمة الترابطية
- المفهوم الأساسي لقسم معمارية المفتاح والقيمة الترابطية في لغة PHP الحديثة.
- للمراجعة
- 03 Creating Associative Arrays إنشاء المصفوفات الترابطية بالسهم
- الصياغة البرمجية والتطبيق العملي المباشر لقسم إنشاء المصفوفات الترابطية بالسهم.
- للمراجعة
- 04 Accessing and Updating by Key القراءة والتعديل عبر اسم المفتاح
- قواعد التحقق وأفضل الممارسات القياسية الخاصة بقسم القراءة والتعديل عبر اسم المفتاح.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 PHP PHP
- PHP: Hypertext Preprocessor
- لغة البرمجة النصية على جانب الخادم لبناء تطبيقات الويب الديناميكية وواجهات البرمجة.
- للمراجعة
- 02 CLI CLI
- Command-Line Interface
- واجهة سطر الأوامر التي تتيح تشغيل ملفات PHP مباشرة عبر الطرفية.
- للمراجعة
- 03 FPM FPM
- FastCGI Process Manager
- مدير عمليات FastCGI عالي الأداء لمعالجة طلبات خادم الويب في PHP.
- للمراجعة
- 04 HTML HTML
- HyperText Markup Language
- لغة الترميز القياسية التي يولدها محرك PHP ويرسلها إلى متصفح العميل بعد التنفيذ.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
أنشئ ملف PHP محلياً ونفّذ المثال البرمجي المشروح في قسم معمارية المفتاح والقيمة الترابطية للتحقق من المخرجات.
-
بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم إنشاء المصفوفات الترابطية بالسهم وقارن مخرجات التنفيذ.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
ما المعامل المستخدم لربط المفتاح النصي بقيمته داخل المصفوفة الترابطية في PHP؟
يُستخدم معامل السهم المزدوج (=>) لربط المفتاح بالقيمة داخل مصفوفات PHP.
إذا كانت لدينا المصفوفة $user = ["name" => "Sara", "role" => "Editor"]; فكيف نقرأ القيمة "Editor"؟
عبر كتابة اسم المفتاح النصي بين علامات تنصيص داخل القوسين المربعين: $user["role"].
إذا كانت $row = ["discount" => null]; فما ناتج كل من isset($row["discount"]) و array_key_exists("discount", $row)؟
تُرجع isset() القيمة false لأن القيمة هي null، بينما تُرجع array_key_exists() القيمة true لأن المفتاح موجود فعلياً.
تحافظ المصفوفات الترابطية في لغة PHP على الترتيب الفعلي الذي أُضيفت به المفاتيح.
صواب؛ تحفظ مصفوفات PHP ترتيب إدخال العناصر بدقة.
ما البنية المدمجة في لغة PHP التي تحذف المفتاح وقيمته نهائياً من المصفوفة؟
تقوم البنية unset($array["key"]) بإزالة المفتاح وقيمته تماماً من المصفوفة.
إذا قمت بتعريف نفس المفتاح النصي مرتين داخل نفس المصفوفة (مثل ["mode" => "dev", "mode" => "prod"])، فإن القيمة الثانية تستبدل القيمة الأولى.
صواب؛ لأن مفاتيح المصفوفة فريدة، فتقوم القيمة الأحدث باستبدال القيمة الأقدم لنفس المفتاح.
ما نوعا البيانات المسموح بهما natively كمفاتيح للمصفوفات في لغة PHP؟
تقبل مفاتيح المصفوفات في PHP الأعداد الصحيحة (int) والنصوص (string) فقط.
أي عبارتين مما يلي صحيحتان حول المصفوفات الترابطية في PHP 8؟
يجب دائماً وضع المفاتيح النصية بين علامات تنصيص، وإسناد قيمة لمفتاح جديد يضيفه إلى المصفوفة.