تفكك [$a, $b] = $array; عناصر مصفوفة إلى متغيرات منفصلة في سطر واحد: يحصل $a على $array[0]، ويحصل $b على $array[1]. وlist($a, $b) = $array; هي الكتابة الأقدم للشيء نفسه، وتفعل ['name' => $name] = $user; ذلك بالمفتاح.
الجمع بين التفكيك وexplode() هو الاستخدام الكلاسيكي: قسّم نصًا، وسمِّ الأجزاء، وتابع.
تخطي العناصر
اترك موضعًا فارغًا لتتخطاه. ويمكنك أيضًا التوقف مبكرًا: العناصر غير المستخدمة في النهاية تُتجاهل.
تفكيك مصفوفة ترابطية بالمفتاح
مع المفاتيح، لا يهم الترتيب في المصفوفة وتأخذ فقط الحقول التي تحتاجها. يُكتب المفتاح قبل =>، والمتغير بعدها.
تتداخل الأنماط بالطريقة نفسها للقوائم: تقرأ [[$x1, $y1], [$x2, $y2]] = $line; نقطتين معًا. ومنذ PHP 7.3 يمكن أن يكون المتغير في النمط مرجعًا أيضًا، [, &$second] = $counts;، فيغيّر تغيير $second المصفوفة.
يستخدم الإسناد الواحد إما المواضع أو المفاتيح، لا الاثنين معًا. تتوقف [$a, 'k' => $b] = $arr; مع Cannot mix keyed and unkeyed array entries in assignments.
تبديل قيمتي متغيرين
ابنِ مصفوفة من القيمتين بالترتيب المعكوس وفكّكها مرة أخرى. لا حاجة إلى متغير مؤقت.
إعادة عدة قيم من دالة
تعيد دالة PHP قيمة واحدة، لكن تلك القيمة قد تكون مصفوفة. والتفكيك عند موضع الاستدعاء يجعلها تُقرأ كأنها عدة قيم معادة. ولأكثر من قيمتين أو ثلاث، أعِد مفاتيح حتى لا يخلط المستدعي الترتيب.
التفكيك في foreach
تعمل الصيغة نفسها في سطر foreach، فيصل كل صف مقسّمًا أصلًا إلى متغيرات مسماة. وهذا ما يقصده الناس بـ «foreach مع list()». مزيد من أنماط الحلقات في صفحة foreach.
عامل البسط (...)
تفك النقاط الثلاث مصفوفة في مكانها. في مصفوفة حرفية، تدمج [...$a, ...$b] المصفوفات. وفي استدعاء دالة، تمرر f(...$args) العناصر وسائط منفصلة. وفي تعريف دالة، تجمع ...$args الوسائط الإضافية في مصفوفة.
قبل PHP 8.1، كان بسط مصفوفة ذات مفاتيح نصية خطأً؛ أما الآن فتُحفظ المفاتيح النصية ويُعاد ترقيم المفاتيح الرقمية، بقواعد array_merge() نفسها. وتُشرح المعاملات المتغيرة العدد مثل ...$amounts مع أنواع المعاملات الأخرى في صفحة الدوال.
خطأ شائع: عناصر أقل من المتغيرات
إذا كانت المصفوفة أقصر من النمط، تصبح المتغيرات المفقودة null وتطبع PHP تحذيرًا لكل منها. يحدث هذا مع مُدخلات لا تتحكم فيها، مثل سطر تنقصه حقول. مع [$name, $city, $country] = explode(',', 'Grace'); تطبع PHP:
Warning: Undefined array key 1 in /var/www/html/import.php on line 5
Warning: Undefined array key 2 in /var/www/html/import.php on line 5
قرّر ما يجب أن يكون عليه الجزء المفقود وأكمل المصفوفة قبل التفكيك:
للأنماط بالمفاتيح، ادمج القيم الافتراضية أولًا: ['a' => $a, 'b' => $b] = $input + ['a' => null, 'b' => null];. لا يضيف العامل + إلا المفاتيح غير الموجودة أصلًا في $input.
الأسئلة الشائعة
ماذا تفعل list() في PHP؟
تُسند list($a, $b) = $array; القيمة $array[0] إلى $a و$array[1] إلى $b. ومنذ PHP 7.1 تفعل الصيغة القصيرة [$a, $b] = $array; الشيء نفسه تمامًا، وتقبل الصيغتان المفاتيح: ['id' => $id] = $row;.
كيف أبدّل قيمتي متغيرين في PHP؟
فكّك مصفوفة جديدة مكوّنة منهما بالترتيب المعاكس: [$a, $b] = [$b, $a];. لا حاجة إلى متغير مؤقت.
هل أستطيع استخدام list() مع مصفوفة ترابطية في PHP؟
نعم، منذ PHP 7.1. سمِّ المفاتيح: ['name' => $name, 'email' => $email] = $user; أو list('name' => $name) = $user;. ودون مفاتيح، تبحث [$a, $b] = $user; عن المفتاحين 0 و1 فتحصل على null مع تحذير.
ما هي النقاط الثلاث (...) في PHP؟
عامل البسط. في مصفوفة حرفية، تنسخ [...$a, ...$b] عناصر المصفوفتين إلى مصفوفة جديدة. وفي استدعاء، تمرر max(...$numbers) العناصر وسائط منفصلة. وفي تعريف دالة، تجمع function sum(...$numbers) أي عدد من الوسائط في مصفوفة.
ماذا يحدث إذا كان في المصفوفة عناصر أقل من المتغيرات في list()؟
تحصل المتغيرات الزائدة على null، وتطبع PHP تحذيرًا مثل Undefined array key 2. أكمل المصفوفة أولًا، مثل [$a, $b, $c] = array_pad($parts, 3, null);.