قد تكون المعلومات المقدمة في صفائفتختلف في نوع القيم وحجمها ، ولا يمكن دائمًا تحديد عدد العناصر مقدمًا. تتيح لك البرمجة الحديثة ، خاصة في إصدار موزع ، إنشاء هياكل بيانات معقدة ، يمكن تحديد محتواها وخصائصها ديناميكيًا في نقطة زمنية غير محددة نتيجة لأفعال أو أحداث مختلفة ، في تسلسل مختلف.
ليس من الممكن دائمًا في مرحلة التطوير التنبؤ بعملية التشغيل ، لتوفير جميع الخيارات الممكنة لعرض واستخدام المعلومات ، وديناميكيات مظهرها واستخدامها.
اقترح صياغة PHP بناء جملة ، PHP اثنينخيارات الوصول للعناصر. كلاهما مستقل عن نوع المفتاح أو نوع القيمة ويمكن محاكاهما في حلقة منتظمة. يُقترح اعتبار الصفيف كمجموعة من العناصر ، التي لم يتم تحديد عددها في البداية. يمكن تشكيل مجموعة على الطاير ، مع أو بدون مفاتيح. يمكن حذف عنصر في الصفيف ، ويمكن أن تكون المفاتيح متراصة وتشكل بشكل افتراضي.
foreach ($ aArrayName كـ $ xValue) {loop body}
هذا التصميم يلزم حلقة PHP foreachالمشي من خلال جميع العناصر على التوالي. في نص الحلقة ، سيأخذ المتغير $ xValue بالتتابع جميع قيم المصفوفة $ aArrayName بالترتيب الذي تمت إضافتها به. لن تكون قيم مفتاح العنصر متاحة.
foreach ($ aArrayName كـ $ xKey => $ xValue) {loop body}
هنا أيضا ، تنفيذ بناء foreach ، PHPسينظر في محتويات المصفوفة بالكامل ، ولكن في نص الحلقة ، سيكون كل من المتغير $ xValue والمتغير $ xKey هو مفتاح العنصر.
داخل foreach ، ستقدم PHP المحتوى باللغةبالترتيب الذي تمت فيه إضافة العناصر ، ولكن إذا حدثت أثناء تكوين الصفيف إضافات / عمليات حذف متكررة ، وتمت إضافة شيء ما باستخدام المفاتيح وشيء بدون ، فمن الأفضل العمل مع الصفيف ليس من موضع تسلسل العناصر ، ولكن بناءً على محتوياتها أو على المفاتيح.
لأسباب موضوعية مختلفةقد لا يتم احترام التسلسل داخل الصفيف و / أو قد لا يكون له أهمية كبيرة ، ولكن لا ينبغي توجيهه في أي حال. في المهام البسيطة ، في مجموعات البيانات التافهة ، لا توجد مشاكل ، ويمكن تكوين الخوارزمية للمعالجة المتسلسلة ، ولكن عندما تؤثر العديد من العوامل على عملية إنشاء / تحرير مصفوفة ، يجب عليك التركيز على المحتوى.
من وجهة نظر المفهوم الخاص الراسخ ، دون مراعاة حتى اللغات المماثلة غير المشروطة ، يجب تصميم مجموعة PHP foreach بشكل مستقل مع مراعاة المهمة الملموسة الحقيقية.
تدرب ، عندما يكون هناك شيء معين ، وهذا له فهرس في المجموعة العامة للمجموعات المماثلة بمعيار معين ، - كان بالأمس.
أصبح المؤشر المفتاح ، وشكلت الصفيفصفيف ترابط. بمعنى ، فقد المفتاح تفرده المتسلسل (عادة ما يكون متسلسلاً: 0 ، 1 ، 2 ، ... n) وأصبح أيضًا قيمة ، ولكن قيمة بسيطة (أي مفتاح) مرتبطة بالقيمة الحقيقية (أي محتوى العنصر). اليوم ، هذا صحيح ، لكنه ليس كاملاً.
هذا هو السبب في أن PHP تعتبره حلقة foreach كبديل للحلقة العادية الموجهة إلى المصفوفات العادية. هذا أولاً وقبل كل شيء ، وهذا مهم جداً ، لأنه يتبع ذلك الصلاحية الحقيقية لعناصر المصفوفة، وكذلك مفاتيحهم!
أولاً كان هناك عنصر ، ثم عنصران ... هذه هي الطريقة التي ظهرت بها مجموعة من العناصر ودورة من خلال مجموعة من تلك العناصر:
for ($ i = 0؛ $ i نص المعالجة لكل $ aArrayName [$ i] } ثم ، بدلاً من 0 ، 1 ، 2 ، ... n ، حصل العنصر على اسمه الخاص - المفتاح ، ثم أصبحت المصفوفات ترابطية ثم كانت هناك حاجة إلى حلقة foreach - "كل حلقة": foreach ($ aArrayName كـ $ xKey => $ xValue) { نص المعالجة لكل $ aArrayName [$ xKey] أو $ xValue وهو نفس الشيء } حان الوقت الآن عندما تأتي العناصر الصحيحة إلى المصفوفة، أي أولئك الذين هم بمفردهم.إنهم يعرفون أنفسهم فهرسهم ومحتواهم ومكانهم في التسلسل ، يميلون إلى إظهار اختيارهم الخاص للتسلسل وتفويض كل هذه القدرات إلى المصفوفة نفسها التي تحتوي عليها. سيتم معالجة هذه المصفوفات الصحيحةمن تلقاء نفسها. ببساطة لن تكون هناك حاجة خاصة لاستخدام حلقات منتظمة وحلقات لكل منها. رسميًا ، يسمح بناء الجملة والدلالات بالفعل بذلك ، والسؤال هو فقط الجمود في وعي المطور.