أجهزة الكمبيوتر شبابيك إنترنت

أمر php foreach حول تعقيدات foreach في PHP. تفريغ المصفوفات المتداخلة باستخدام list ()

الحلقة For every ... Next loop in برنامج VBA Excel، تركيبها ووصف المكونات الفردية. أمثلة على استخدام حلقة For each ... Next.

تم تصميم الحلقة For each ... Next في VBA Excel لتنفيذ كتلة من العبارات فيما يتعلق بكل عنصر من مجموعة من العناصر (النطاق ، الصفيف ، المجموعة). تستخدم هذه الحلقة الرائعة عندما يكون عدد العناصر في المجموعة وفهرستها غير معروفين ، وإلا يفضل استخدامها.

لكل ... بناء الحلقة التالية

لكل عنصر في مجموعة [عبارات] [خروج من أجل] [عبارات] التالي [عنصر]

الخامس أقواس مربعةيتم تحديد السمات الاختيارية لحلقة For Every ... Next.

لكل ... مكونات الحلقة التالية

*إذا تم استخدام حلقة For Every ... Next في VBA Excel للتكرار خلال عناصر مجموعة (كائن مجموعة) أو مصفوفة ، ثم المتغير عنصريجب التصريح عن نوع البيانات متغيروإلا فإن الحلقة لن تعمل.

**إذا لم تستخدم الكود الخاص بك في الحلقة ، فسيتم فقد معنى استخدام الحلقة.

لكل ... أمثلة الحلقة التالية

تكرار لنطاق من الخلايا

في الورقة النشطة في مصنف Excel ، حدد نطاقًا من الخلايا وقم بتشغيل الإجراء التالي:

اختبار فرعي 1 () عنصر Dim كنطاق ، a As String a = "البيانات المستردة من For each ... التالي:" لكل عنصر في التحديد a = a & vbNewLine & "Cell" & element.Address & _ "يحتوي على القيمة: "& CStr (element.Value) MsgBox التالية a End Sub

ستعرض نافذة معلومات MsgBox عناوين الخلايا المحددة ومحتوياتها ، إن وجدت. إذا تم تحديد عدد كبير من الخلايا ، فلن يتم عرض المعلومات الكاملة عن جميع الخلايا ، نظرًا للحد الأقصى لطول المعلمة مستعجلحوالي 1024 حرفًا.

حلقة لجمع الأوراق

انسخ إجراء VBA التالي إلى مصنفات Excel:

اختبار فرعي 2 () عنصر باهت على هيئة ورقة عمل ، a كسلسلة أ = "قائمة أوراق العمل الواردة في هذا الكتاب:" لكل عنصر في أوراق العمل a = a & vbNewLine & element.Index _ & ")" & element.Name التالي MsgBox a End Sub

ستعرض نافذة معلومات MsgBox قائمة بأسماء جميع الأوراق في مصنف Excel من خلال العدد الترتيبي لعلامات التبويب المقابلة لمؤشراتها.

حلقة لصفيف

قم بتعيين قائمة بأسماء الحيوانات إلى المصفوفة وفي حلقة For each ... Next اكتبها إلى متغير أ... نافذة المعلومات MsgBox ستعرض قائمة بأسماء الحيوانات من متغير أ.

اختبار فرعي 3 () عنصر باهت كمتغير ، كسلسلة ، مجموعة كمجموعة متغيرة = صفيف ("hippopotamus" ، "elephant" ، "kangaroo" ، "tiger" ، "mouse") "، على سبيل المثال الورقة المحددة: المجموعة = Selection a = "تحتوي المصفوفة على القيم التالية:" & vbNewLine لكل عنصر في المجموعة a = a & vbNewLine & element MsgBox a End Sub

دعنا نكرر نفس إجراء VBA ، لكن قم بتعيين جميع عناصر المصفوفة في حلقة For each ... Next إلى Parrot. ستعرض نافذة معلومات MsgBox قائمة بأسماء الحيوانات ، تتكون فقط من الببغاوات ، مما يثبت إمكانية تحرير قيم عناصر المصفوفة في حلقة For each ... Next.

اختبار فرعي 4 () عنصر خافت كمتغير ، كسلسلة ، مجموعة كمجموعة متغيرة = صفيف ("hippopotamus" ، "elephant" ، "kangaroo" ، "tiger" ، "mouse") "، على سبيل المثال ، الورقة المحددة: group = Selection a = "تحتوي المصفوفة على القيم التالية:" & vbNewLine لكل عنصر في عنصر المجموعة = "Parrot" a = a & vbNewLine & element MsgBox a End Sub

تم اختبار هذا الرمز ، مثل أي شيء آخر في هذه المقالة ، في Excel 2016.

حلقة لتجميع الدلائل الفرعية والخروج من الحلقة

في هذا المثال ، سنضيف إلى المتغير أأسماء الدلائل الفرعية الموجودة على القرص جحاسوبك. عندما تصل الدورة إلى المجلد ملفات البرنامج، ستضيف إلى المتغير أاسمها ورسالتها: كفى ، لن أقرأ أكثر! مع تحياتي ، حلقة For Every ... الحلقة التالية ".

Sub test5 () Dim FSO ككائن ، myFolders As Object ، myFolder As Object ، كسلسلة "إنشاء FileSystemObject جديد وتعيينه إلى متغير" FSO "Set FSO = CreateObject (" Scripting.FileSystemObject ")" استخراج قائمة من الدلائل الفرعية الموجودة على القرص "C" وقم بتعيينها إلى المتغير "myFolders" تعيين myFolders = FSO.GetFolder ("C: \") a = "المجلدات الموجودة على القرص C:" & vbNewLine "التكرار خلال قائمة الدلائل الفرعية وأضفها أسماء المتغير "a" بعد الوصول إلى مجلد "Program Files" ، قم بإنهاء الحلقة لكل myFolder في myFolders.SubFolders a = a & vbNewLine & myFolder.Name إذا كان myFolder.Name = "ملفات البرنامج" ثم a = a & vbNewLine & vbNewLine & "Enough، read on I won't!" _ & vbNewLine & vbNewLine & "Regards،" & vbNewLine & _ "Your For each ... Next loop." Exit For End If Next Set FSO = Nothing MsgBox أ End Sub

نافذة المعلومات ، ستعرض MsgBox قائمة بأسماء الدلائل الفرعية الموجودة على القرص ججهاز الكمبيوتر الخاص بك إلى المجلد ملفات البرنامجشامل ورسالة الدورة حول إنهاء عملها.

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

افعل الحلقات أثناء و foreach

حلقة دو. ... ... في حين

حلقة do ... while loopفي C # ، إنها نسخة لاحقة من while. هذا يعني أن شرط الحلقة يتم فحصه بعد تنفيذ جسم الحلقة. لذلك ، تعد حلقات do ... while loops مفيدة في المواقف التي يجب فيها تنفيذ كتلة من العبارات مرة واحدة على الأقل. ما يلي هو الشكل العام لتعليمة حلقة do-while:

تفعل (البيانات ؛) بينما (الشرط) ؛

إذا كان هناك عامل واحد فقط ، فإن الأقواس المتعرجة اختيارية في هذا الترميز. ومع ذلك ، غالبًا ما يتم استخدامها لجعل بناء do-while أكثر قابلية للقراءة وعدم الخلط بينه وبين بنية حلقة while. تعمل حلقة do-while طالما أن التعبير الشرطي صحيح. مثال على استخدام حلقة do-while هو البرنامج التالي الذي يحسب معامل الرقم:

باستخدام النظام ؛ باستخدام System.Collections.Generic ؛ باستخدام System.Linq ؛ باستخدام System.Text ؛ مساحة الاسم ConsoleApplication1 (فئة البرنامج (الفراغ الثابت الرئيسي (سلسلة args) (حاول (// احسب معامل int i ، النتيجة = 1 ، num = 1 ؛ Console.WriteLine ("أدخل رقمًا:") ؛ i = int.Parse) (Console .ReadLine ())؛ Console.Write ("\ n \ nFactorial (0) ="، i)؛ do (نتيجة * = num؛ num ++؛) while (num

حلقة Foreach

حلقة Foreachيعمل على الوصول الدوري إلى عناصر مجموعة ، وهي مجموعة من الكائنات. تعرف C # عدة أنواع من المجموعات ، كل منها عبارة عن مصفوفة. ما يلي هو الشكل العام لبيان حلقة foreach:

عامل foreach (اكتب loop_variable_name في المجموعة) ؛

هنا اكتب cycle_variable_nameيشير إلى نوع واسم متغير التحكم في الحلقة الذي يحصل على قيمة العنصر التالي في المجموعة في كل خطوة من حلقة foreach. وتدل المجموعة على مجموعة يتم استقصاؤها دوريًا ، والتي يشار إليها فيما بعد بأنها مصفوفة. لذلك ، يجب أن يتطابق نوع متغير الحلقة مع نوع عنصر المصفوفة. بالإضافة إلى ذلك ، يمكن الإشارة إلى النوع كلمة رئيسيةفار. في هذه الحالة ، يحدد المترجم نوع متغير الحلقة بناءً على نوع عنصر المصفوفة. يمكن أن يكون هذا مفيدًا للتعامل مع أنواع معينة من الاستعلامات. ولكن ، كقاعدة عامة ، يتم تحديد النوع بشكل صريح.

تعمل جملة حلقة foreach على النحو التالي. عندما تبدأ الحلقة ، يتم تحديد العنصر الأول من المصفوفة وتعيينه إلى متغير الحلقة. في كل خطوة لاحقة من التكرار ، يتم تحديد العنصر التالي من المصفوفة وتخزينه في متغير الحلقة. تنتهي الحلقة عند تحديد جميع عناصر المصفوفة.

تسمح لك حلقة foreach بالمرور عبر كل عنصر في المجموعة (كائن يمثل قائمة كائنات أخرى). رسميًا ، لكي يتم اعتبار شيء ما مجموعة ، يجب أن يدعم واجهة IEnumerable. تتضمن أمثلة المجموعات مصفوفات C # وفئات المجموعة من مساحة اسم المجموعة System.Collection وفئات المجموعات المخصصة.

(PHP 4 ، PHP 5 ، PHP 7)

تصميم foreachيوفر طريقة سهلة للتكرار عبر المصفوفات. Foreachيعمل فقط مع المصفوفات والكائنات ، وسوف ينتج عنه خطأ عند محاولة استخدامه مع متغيرات من أنواع أخرى أو متغيرات غير مهيأة. هناك نوعان من بناء الجملة:

جملة foreach (array_expression as $ value) عبارة foreach (array_expression كـ $ key => $ value) بيان

تتكرر الحلقة الأولى عبر المصفوفة المحددة بـ مجموعة_تعبير... في كل تكرار ، يتم تعيين قيمة العنصر الحالي إلى متغير قيمة دولارويتم زيادة المؤشر الداخلي للمصفوفة بمقدار واحد (وبالتالي ، في التكرار التالي للحلقة ، سيحدث العمل مع العنصر التالي).

ستربط الحلقة الثانية بالإضافة إلى ذلك مفتاح العنصر الحالي بالمتغير مفتاح $في كل تكرار.

تعليق:

عندما المشغل foreachيبدأ التنفيذ ، يتم تعيين المؤشر الداخلي للمصفوفة تلقائيًا على عنصرها الأول ، وهذا يعني أنه لا توجد حاجة لاستدعاء الوظيفة إعادة تعيين ()قبل استخدام الحلقة foreach.

منذ المشغل foreachيعتمد على مؤشر مصفوفة داخلية ، فإن تغييره داخل الحلقة يمكن أن يؤدي إلى سلوك غير متوقع.

من أجل التغيير المباشر لعناصر المصفوفة داخل حلقة ، المتغير قيمة دولاريجب أن يسبقه &. في هذه الحالة ، سيتم تعيين القيمة عن طريق المرجع.

$ arr = مجموعة (1، 2، 3، 4) ؛
foreach ($ arr as & $ value) (
القيمة بالدولار = القيمة بالدولار * 2 ؛
}
// $ arr الآن صفيف (2، 4، 6، 8)
unset (القيمة بالدولار) ؛ // كسر الارتباط بالعنصر الأخير
?>

مؤشر ل قيمة دولارممكن فقط إذا كان من الممكن الرجوع إلى المصفوفة التي يتم تكرارها (على سبيل المثال ، إذا كانت متغيرة). الكود التالي لن يعمل:

foreach (مجموعة (1، 2، 3، 4) as & $ value) (
القيمة بالدولار = القيمة بالدولار * 2 ؛
}
?>

انتباه

وصلة قيمة دولاريبقى العنصر الأخير من المصفوفة حتى بعد المشغل foreachانتهى العمل. يوصى بتدميرها باستخدام الوظيفة unset ().

تعليق:

المشغل أو العامل foreachلا يدعم القدرة على منع رسائل الخطأ باستخدام البادئة "@".

ربما لاحظت أن التركيبات التالية متطابقة وظيفيًا:


إعادة تعيين ($ arr) ؛
while (list (، $ value) = كل ($ arr)) (
صدى "القيمة: $ value
\ ن "؛
}

foreach ($ arr as $ value) (
صدى "القيمة: $ value
\ ن "؛
}
?>

التركيبات التالية هي أيضًا متطابقة وظيفيًا:

$ arr = مجموعة ("واحد" ، "اثنان" ، "ثلاثة") ؛
إعادة تعيين ($ arr) ؛
while (list ($ key، $ value) = each ($ arr)) (

\ ن "؛
}

foreach ($ arr as $ key => $ value) (
صدى "Key: $ key؛ Value: $ value
\ ن "؛
}
?>

فيما يلي بعض الأمثلة التي توضح استخدام عامل التشغيل:

/ * المثال 1: القيمة فقط * /

$ a = مجموعة (1 ، 2 ، 3 ، 17) ؛

foreach ($ a كـ $ v) (
صدى صوت "القيمة الحالية لمتغير \ $:$ v. \ n "؛
}

/ * مثال 2: القيمة (للتوضيح ، يتم إخراج المصفوفة كقيمة بمفتاح) * /

$ a = مجموعة (1 ، 2 ، 3 ، 17) ؛

أنا دولار = 0 ؛ / * للتوضيح فقط * /

Foreach ($ a as $ v) (
صدى "\ $ a [$ i] => $ v. \ n"؛
أنا ++ دولار ؛
}

/ * مثال 3: المفتاح والقيمة * /

$ a = مجموعة (
"واحد" => 1 ،
"اثنان" => 2 ،
"ثلاثة" => 3 ،
"سبعة عشر" => 17
);

foreach ($ a كـ $ k => $ v) (
صدى "\ $ a [$ k] => $ v. \ n"؛
}

/ * مثال 4: المصفوفات متعددة الأبعاد * /
$ a = مجموعة () ؛
$ a [0] [0] = "a" ؛
$ a [0] [1] = "b" ؛
$ a [1] [0] = "y" ؛
$ a [1] [1] = "z" ؛

foreach ($ a كـ $ v1) (
foreach ($ v1 as $ v2) (
صدى "$ v2 \ n"؛
}
}

/ * مثال 5: المصفوفات الديناميكية * /

Foreach (مجموعة (1، 2، 3، 4، 5) كـ $ v) (
صدى "$ v \ n"؛
}
?>

تفريغ المصفوفات المتداخلة باستخدام list ()

(PHP 5> = 5.5.0، PHP 7)

أضاف PHP 5.5 القدرة على اجتياز مصفوفة من المصفوفات عن طريق تفريغ المصفوفة المتداخلة في متغيرات الحلقة عن طريق التمرير قائمة ()كقيمة.

إن بنية foreach هي نكهة لـ "مدرج في اللغة" لتسهيل التكرار على عناصر المصفوفة. هناك نوعان من النكهات للأمر foreach ، تستهدف أنواعًا مختلفة من المصفوفات:

foreach (مصفوفة كعنصر $) (

foreach (مصفوفة كمفتاح $ => عنصر $) (

على سبيل المثال ، عند تنفيذ المقتطف التالي:

القائمة $ = аrrау ("باستا" ، "ستيك" ، "بطاطس" ، "سمك" ، "فرايز") ؛

foreach (قائمة $ كعنصر $) (

طباعة "$ item
";

سيتم عرض الإخراج التالي:

في هذا المثال ، يجب ملاحظة شيئين. أولاً ، يعود بناء foreach تلقائيًا إلى بداية المصفوفة (لا يحدث هذا في بنيات التكرار الأخرى). ثانيًا ، ليست هناك حاجة لزيادة العداد صراحة أو الانتقال إلى العنصر التالي في المصفوفة - يحدث هذا تلقائيًا مع كل تكرار لـ foreach.

يتم استخدام الخيار الثاني عند العمل مع المصفوفات الترابطية:

$ wine_inventory = مجموعة (

"merlot" => 15 ،

"zinfandel" => 17 ،

"sauvignon" => 32

foreach ($ wine_inventory كـ $ i => $ item_count) (

اطبع "زجاجات عنصر_الدولار المتبقي من $ i
";

في هذه الحالة ، تبدو النتيجة كما يلي:

15 زجاجة من ميرلوت متبقية

17 زجاجة متبقية من زينفاندل

تبقى 32 زجاجة من ساوفيجنون

كما ترى من الأمثلة السابقة ، فإن بنية foreach تجعل العمل مع المصفوفات أسهل بكثير.

يشبه مبدأ تشغيل إنشاء المفتاح إلى حد ما إذا - يتم التحقق من النتيجة التي تم الحصول عليها عند تقييم تعبير مقابل قائمة المطابقات المحتملة.

يكون هذا مفيدًا بشكل خاص عند التحقق من قيم متعددة ، لأن استخدام رمز التبديل يجعل البرنامج أكثر وصفًا وصغرًا. التنسيق العام لأمر التبديل هو:

التبديل (التعبير) (

الحالة (الحالة):

الحالة (الحالة):

يشار إلى الشرط المراد التحقق منه بين قوسين بعد كلمة التبديل. تتم مقارنة نتيجة حسابها بالتسلسل مع الشروط في أقسام الحالة. إذا تم العثور على تطابق ، يتم تنفيذ كتلة القسم المقابل. إذا لم يتم العثور على تطابق ، يتم تنفيذ كتلة القسم الافتراضية الاختيارية.

كما سترى في الفصول التالية ، فإن إحدى نقاط القوة في PHP هي التعامل مع مدخلات المستخدم. لنفترض أن البرنامج يعرض قائمة منسدلة بها عدة خيارات وكل سطر من القائمة يتوافق مع بعض الأوامر المنفذة في بناء حالة منفصل. من المريح جدًا إنشاء التنفيذ باستخدام أمر التبديل:

$ user_input = "وصفات"؛ // الأمر المحدد من قبل المستخدم

التبديل ($ user_input):

حالة ("بحث"):

طباعة "دعونا إجراء بحث!" ؛

الحالة ("القاموس"):

اطبع "ما هي الكلمة التي تريد البحث عنها؟" ؛

الحالة ("الوصفات"):

طباعة "هنا قائمة الوصفات ..."؛

طباعة "هنا القائمة ..." ؛

كما ترى من المقتطف أعلاه ، يوفر أمر التبديل تنظيمًا واضحًا وبديهيًا للكود. تتم مقارنة المتغير المحدد في عبارة التبديل (في هذا المثال $ user_input) مع شروط جميع أقسام الحالة اللاحقة. إذا كانت القيمة المحددة في قسم الحالة تطابق قيمة المتغير الذي تتم مقارنته ، فسيتم تنفيذ كتلة هذا القسم. تمنع تعليمة break المزيد من أقسام الحالة من التحقق منها وتنهي تعليمة switch. إذا لم يتم استيفاء أي من الشروط المحددة ، يتم استدعاء القسم الافتراضي الاختياري. إذا لم يكن هناك قسم افتراضي ولم يتم استيفاء أي من الشروط ، فإن أمر التبديل ينتهي ببساطة ويستمر تنفيذ البرنامج مع الأمر التالي.

يجب أن تتذكر أنه في حالة عدم وجود عبارة break في قسم الحالة (انظر القسم التالي) ، يستمر تنفيذ التبديل مع العبارة التالية حتى يتم العثور على تعليمة break أو الوصول إلى نهاية تعليمة switch. يوضح المثال التالي عواقب فقدان أمر كسر منسي: القيمة $ = 0.4؛

التبديل (القيمة بالدولار):

قيمة الطباعة هي 0.4
";

قيمة الطباعة هي 0.6
";

قيمة الطباعة هي 0.3
";

طباعة "لم تختر قيمة!" ؛

تبدو النتيجة كما يلي:

أدى عدم وجود أمر break ليس فقط إلى تنفيذ أمر الطباعة في القسم الذي تم العثور فيه على المطابقة ، ولكن أيضًا إلى أمر الطباعة في القسم التالي. بعد ذلك ، تمت مقاطعة تنفيذ عبارات التبديل بواسطة عبارة التبديل التي تلي جملة الطباعة الثانية.

الاختيار بين التبديل وأوامر if ليس له أي تأثير عمليًا على أداء البرنامج. قرار استخدام هذا البناء أو ذاك هو بالأحرى مسألة شخصية للمبرمج.

توقف تعليمة break على الفور تنفيذ جملة while أو for أو switch التي تقع فيها. سبق ذكر هذا الأمر في القسم السابق ، لكن مقاطعة الحلقة الحالية لا تستنفد إمكانيات الأمر break. بشكل عام ، تبدو صيغة الفاصل كما يلي:

تحدد المعلمة الاختيارية n عدد مستويات هياكل التحكم التي سيتم إنهاؤها بواسطة الأمر break. على سبيل المثال ، إذا كان أمر break متداخلًا في عبارتين while وكان الرقم 2 بعد الفاصل ، فسيتم إنهاء كلتا الحلقتين على الفور. القيمة الافتراضية لـ n هي 1 ؛ يمكن الإشارة إلى الانتقال إلى مستوى واحد إما عن طريق إشارة صريحة إلى 1 ، أو من خلال الإشارة إلى أمر break بدون معلمة. لاحظ أن الأمر i f ليس أحد عناصر التحكم التي تمت مقاطعتها بواسطة الأمر break.

غالبًا ما تحتاج إلى استعراض جميع عناصر مصفوفة PHP وتنفيذ نوع من العمليات على كل عنصر. على سبيل المثال ، يمكنك إخراج كل قيمة إلى جدول HTML ، أو يمكنك تعيين قيمة جديدة لكل عنصر.

في هذا الدرس ، سنلقي نظرة على بنية foreach عند التكرار عبر المصفوفات المفهرسة والمرتبطة.

حلقة فوق قيم العنصر

أبسط حالة استخدام لـ foreach هي عند تكرار القيم في مصفوفة مفهرسة. بناء الجملة الأساسي:

Foreach ($ array as $ value) (// افعل شيئًا بقيمة $) // هنا يتم تنفيذ الكود بعد انتهاء الحلقة

على سبيل المثال ، يتكرر البرنامج النصي التالي عبر قائمة المخرجين في مصفوفة مفهرسة ويطبع اسم كل منها:

المخرجون $ = array ("Alfred Hitchcock"، "Stanley Kubrick"، "Martin Scorsese"، "Fritz Lang")؛ foreach (المخرجون بالدولار الأمريكي المخرجون) (صدى $ المخرج. "
"; }

سيخرج الكود أعلاه:

ألفريد هيتشكوك ستانلي كوبريك مارتن سكورسيزي فريتز لانغ

حلقة فوق المفاتيح والقيم

ماذا عن المصفوفات المرتبطة؟ عند استخدام هذه الأنواع من المصفوفات ، غالبًا ما يكون من الضروري الوصول إلى مفتاح كل عنصر بالإضافة إلى قيمته. تمتلك بنية foreach طريقة لإنجاز هذه المهمة:

Foreach ($ array as $ key => $ value) (// افعل شيئًا بمفتاح $ و / أو بقيمة $) // هنا يتم تنفيذ الكود بعد انتهاء الحلقة

مثال على تنظيم حلقة عبر مصفوفة مرتبطة بمعلومات حول الأفلام ، يعرض مفتاح كل عنصر وقيمته في قائمة تعريف HTML:

$ movie = array ("title" => "النافذة الخلفية"، "المخرج" => "Alfred Hitchcock"، "year" => 1954، "minutes" => 112)؛ صدى صوت "

"؛ foreach (فيلم $ as $ key => $ value) (echo"
مفتاح $:
"؛ صدى صوت"
قيمة دولار
"؛) صدى صوت"
";

سينتج هذا النص عند تنفيذه:

العنوان: النافذة الخلفية مخرج: ألفريد هيتشكوك السنة: 1954 دقيقة: 112

تغيير قيمة العنصر

ولكن ماذا عن التغيير في قيمة العنصر أثناء الحلقة؟ يمكنك تجربة كود مثل هذا:

Foreach ($ myArray كقيمة $) ($ value = 123 ؛)

ومع ذلك ، إذا قمت بتشغيله للتنفيذ ، فستجد أن القيم في المصفوفة لا تغير... والسبب هو أن foreach يعمل مع نسخةقيم الصفيف ، وليس الأصلي. هذا يترك المصفوفة الأصلية سليمة.

لتغيير قيم المصفوفة ، أنت بحاجة حلقة الوصلعلى القيمة. للقيام بذلك ، تحتاج إلى وضع العلامة & أمام متغير القيمة في بنية foreach:

Foreach ($ myArray as & $ value) ($ value = 123 ؛)

على سبيل المثال ، يقوم النص البرمجي التالي بالتكرار عبر كل عنصر من عناصر (اسم المخرج) في مصفوفة $ directors ، ويستخدم دالة PHP explode () وبناء القائمة لمبادلة الاسمين الأول والأخير:

المخرجون $ = array ("Alfred Hitchcock"، "Stanley Kubrick"، "Martin Scorsese"، "Fritz Lang")؛ // تغيير تنسيق الاسم لكل عنصر foreach (المخرجون $ كـ & $ Director) (list ($ firstName، $ lastName) = explode (""، $ Director)؛ $ Director = "$ lastName، $ firstName"؛) unset ($ المخرج)؛ // اطبع النتيجة النهائية لكل من (المخرجون بالدولار الأمريكي) (صدى $ المخرج. "
"; }

سينتج البرنامج النصي:

هيتشكوك ، ألفريد كوبريك ، ستانلي سكورسيزي ، مارتن لانج ، فريتز

لاحظ أن البرنامج النصي يستدعي الوظيفة unset () لإزالة المتغير $ Director بعد انتهاء الحلقة الأولى. هذه ممارسة جيدة إذا كنت تخطط لاستخدام المتغير لاحقًا في البرنامج النصي في سياق مختلف.

إذا لم تحذف الرابط ، فهناك مخاطرة في التنفيذ الإضافي للكود الخاص بمرجع عشوائي إلى العنصر الأخير في المصفوفة ("Lang، Fritz") ، إذا واصلت استخدام المتغير $ Director ، والذي سوف يؤدي إلى عواقب غير متوقعة!

ملخص

في هذا البرنامج التعليمي ، درسنا كيفية استخدام بنية PHP foreach للتكرار خلال عناصر المصفوفة. تم النظر في القضايا التالية:

  • كيفية إجراء حلقة من خلال عناصر المصفوفة
  • كيفية الوصول إلى مفتاح وقيمة كل عنصر
  • كيفية استخدام مرجع لتغيير القيم أثناء السير في الحلقة