محتويات الدورة

PHP / أساسي: القيم وأسس الطلب / الدرس 3

المصفوفات وتدفق التحكم والغياب الصريح

استخدم مصفوفات PHP كخرائط مرتبة وميّز حقول السجل من القوائم. اجمع القرار الصارم والمرور المحدود دون إخفاء المفاتيح أو تغيير شكل القائمة عرضياً.

وقت القراءة التقريبي: 3 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • شرح مفاتيح الخريطة المرتبة وتمثيل القائمة.
  • تمييز المفتاح الغائب من قيمة null.
  • تتبع الحلقات والشروط الصارمة وثوابت التجميع.

يخدم نوع المصفوفة نماذج بيانات متعددة

مصفوفة PHP خريطة مرتبة بمفاتيح صحيحة أو نصية وقواعد تحويل. القائمة شكل أضيق بمفاتيح متتابعة من صفر، ويربط السجل أسماء بقيم. افصل العقدين رغم نوع واحد. راعِ المفاتيح العددية الشكل وتصادمها دون استعارة افتراضات JavaScript. تحقق من حقول السجل مرة، واحفظ ترتيب القائمة وأعد الفهرسة إن سببت الفجوات اختلاف JSON.

الوجود وعدم null سؤالان مختلفان

تفحص array_key_exists الوجود ولو كانت القيمة null. وتفشل isset للغائب وnull وتوفر ?? بديلاً بلا تحذير مفتاح. اختر حسب العقد؛ فملاحظة تقبل null تختلف عن كمية مطلوبة. قد يجعل استبدال الغائب بصفر الطلب المشوه صالحاً ظاهرياً. يوضح المثال الفرق بلا تحذير. لا تقمع الأخطاء لتسهيل بنية مجهولة؛ أصلح الحد الذي وعد بها.

php الوجود وnull والصفر الصالح
<?php
declare(strict_types=1);
$record = ["note" => null, "count" => 0];
echo (array_key_exists("note", $record) ? "present" : "missing"), PHP_EOL;
echo (isset($record["note"]) ? "set" : "null-or-missing"), PHP_EOL;
echo $record["count"] ?? 10, PHP_EOL;
الناتج المتوقع
present
null-or-missing
0

الملاحظة موجودة لكنها null، ويبقى العدد صفراً دون البديل.

ينبغي أن يعكس القرار قيماً موحدة

تقارن المساواة الصارمة النوع والقيمة فتجنب مفاجآت حدود الطلب. وحّد وتحقق قبل الشروط بدلاً من تحويلات مبعثرة. تقارن match منذ 8.0 صارماً وتعيد قيمة، وترفع خطأ للغائب دون default. تناسب if/elseif المجالات والشروط المركبة. ارفض قبل التعديل حتى لا يستهلك فحص فاشل مقعداً. راجع الحدود والتداخل لا الإزاحة وحدها.

قد تحفظ التصفية مفاتيح لا تريدها

تحفظ array_filter المفاتيح، وقد يحول حذف الوسط القائمة إلى خريطة في JSON. أعد الفهرسة بـarray_values إذا كان العقد قائمة والمواضع ليست معرفات. لا تعِد فهرسة خريطة معرفات لتجميل JSON. يحفظ المثال ترتيب العناوين ويوضح التمثيل. استخدم شرطاً صريحاً لا تصفية الصدق الافتراضية إن كان الصفر أو false أو الفراغ صالحاً.

php المفاتيح المحفوظة والقائمة العامة الصريحة
<?php
declare(strict_types=1);
$titles = ["DOM", "", "PDO"];
$filtered = array_filter($titles, fn(string $title): bool => $title !== "");
echo json_encode($filtered, JSON_THROW_ON_ERROR), PHP_EOL;
echo json_encode(array_values($filtered), JSON_THROW_ON_ERROR), PHP_EOL;
الناتج المتوقع
{"0":"DOM","2":"PDO"}
["DOM","PDO"]

الأول كائن لغياب المفتاح واحد؛ وتثبت array_values شكل القائمة المقصود.

إظهار التقدم والتعديل في الحلقات

تناسب foreach القيم والأزواج. أعطِ المجمع بداية وثابتاً مثل مجموع المبالغ المعالجة. تترك foreach المرجعية متغير الحلقة مرتبطاً بعنصر إن لم يحرر، فتفاجئ الإسنادات اللاحقة؛ فضّل المرور العادي إن لم يلزم التعديل. حدّ الحلقات الخارجية وتجنب تعديل يغمض الزيارات. قد تبسط return وcontinue الرفض، لكن حدّد هل يرفض سجل خاطئ العملية أم يجمع خطأً منفصلاً.

الأخطاء الشائعة وإصلاحها

اعتبار حقل null مفتاحاً غائباً

لماذا يحدث؟
استخدام isset لعقد وجود فقط.
كيف تصلحه؟
استخدام array_key_exists لتمييز null الصريحة.
كيف تتجنب تكراره؟
اختبار الغائب وnull والصفر والمعتاد.

تحول قائمة JSON إلى كائن

لماذا يحدث؟
حفظ التصفية مفاتيح غير متتابعة.
كيف تصلحه؟
تطبيق array_values للقائمة المقصودة.
كيف تتجنب تكراره؟
فحص الشكل مع القيم.

تعديل إسناد لاحق آخر عنصر

لماذا يحدث؟
بقاء متغير foreach المرجعي مرتبطاً.
كيف تصلحه؟
تجنب المرجع أو حرره بـunset عمداً.
كيف تتجنب تكراره؟
مراجعة عمر الربط واختبار الإسناد التالي.

اختبر فهمك

1. يحوي السجل ["count"=>0]. ماذا تعيد count ?? 10؟

اعرض الحل المشروح

تعيد صفراً لوجود قيمة غير null. يجيب بديل الصدق عن سؤال آخر. تحقق من عدد صحيح مسموح منفصلاً؛ فلا تثبت ?? قبول السالب أو النص.

2. احذف العنوان الفارغ من ["A","","B"] لقائمة JSON.

اعرض الحل المشروح

استخدم شرط نص غير فارغ ثم array_values قبل JSON؛ فالمتوقع ["A","B"]. إذا كانت المفاتيح معرفات خارجية فاحفظ خريطة موثقة بدلاً من فقد الهوية.

أهم ما تعلمته

  • شكل المصفوفة والغياب جزء من العقد العام.
  • وحّد قبل القرار الصارم ووضح ملكية المرور.

المراجع الرسمية