foreach index في PHP: أفضل 3 طرق في 2025

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: السؤال الأبدي عن foreach والفهرس

\n\n

إذا سبق لك البرمجة بلغة PHP، فبالتأكيد واجهت موقفًا تحتاج فيه ليس فقط إلى تكرار عناصر المصفوفة، بل أيضًا إلى معرفة الرقم الترتيبي للتكرار الحالي. قد يبدو الأمر بسيطًا، لكن هذا السؤال بالتحديد — "How to find the foreach index?" — يحصد آلاف المشاهدات على Stack Overflow. وليس من دون سبب!

\n\n

في عام 2025، بينما تواصل PHP تطورها وتزداد المشاريع تعقيدًا، فإن فهم كيفية التعامل الصحيح مع الفهارس في حلقة foreach لم يعد مجرد رفاهية، بل ضرورة ملحة. تعتمد على ذلك سهولة قراءة الكود، وأداؤه، ومدى سهولة صيانته من قبل زميلك (أو حتى أنت بعد ستة أشهر).

\n\n

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

\n\n

الطريقة الأولى: استخدام مفاتيح المصفوفة (الأكثر أناقة)

\n\n

أبسط وأكثر الطرق "أصالة" في PHP هي استخدام الصيغة foreach ($array as $key => $value). لا تتطلب هذه الطريقة متغيرات إضافية أو دوال، وتعمل مع أي مصفوفة، سواء كانت قوائم بمفاتيح رقمية أو مصفوفات ترابطية.

\n\n

كيف تعمل؟

\n

تخيل أن لديك مصفوفة من المستخدمين:

\n\n
<?php\n$users = ['أحمد', 'سارة', 'خالد', 'نورة'];\n\nforeach ($users as $index => $name) {\n    echo "المستخدم #{$index}: {$name}<br>";\n}\n?>
\n\n

النتيجة ستكون:

\n
المستخدم #0: أحمد\nالمستخدم #1: سارة\nالمستخدم #2: خالد\nالمستخدم #3: نورة
\n\n

لاحظ أن $index ليس مجرد عداد. إنه المفتاح الحقيقي للمصفوفة. إذا كانت المصفوفة تحتوي على مفاتيح غير قياسية (مثل النصية)، فإن $index سيحتوي عليها تمامًا.

\n\n

متى تستخدم هذه الطريقة؟

\n
    \n
  • دائمًا عندما يكون ذلك ممكنًا. هذه هي الطريقة الأكثر قابلية للقراءة والأعلى أداءً.
  • \n
  • عندما لا تحتاج إلى إعادة تعيين العداد أو التحكم فيه يدويًا.
  • \n
  • لجميع أنواع المصفوفات: سواء كانت قوائم أو مصفوفات ترابطية.
  • \n
\n\n

المأزق الشائع

\n

إذا كانت المصفوفة تحتوي على "فجوات" في الفهارس (مثلًا بعد حذف عنصر)، فإن $index سيساوي المفتاح الفعلي، وليس الرقم الترتيبي. مثال:

\n\n
<?php\n$fruits = [0 => 'تفاح', 2 => 'موز', 5 => 'كرز'];\n\nforeach ($fruits as $key => $fruit) {\n    echo "المفتاح: {$key}, الفاكهة: {$fruit}<br>";\n}\n?>
\n\n

النتيجة:

\n
المفتاح: 0, الفاكهة: تفاح\nالمفتاح: 2, الفاكهة: موز\nالمفتاح: 5, الفاكهة: كرز
\n\n

إذا كنت بحاجة إلى رقم ترتيبي متسلسل (0, 1, 2)، فهذه الطريقة لن تناسبك — ستحتاج إلى استخدام الطريقة الثانية.

\n\n

الطريقة الثانية: العداد اليدوي (المرونة والتحكم)

\n\n

النهج التقليدي هو إنشاء متغير عداد وزيادته في كل تكرار. يمنحك هذا تحكمًا كاملاً في الترقيم.

\n\n

مثال أساسي

\n\n
<?php\n$items = ['كتاب', 'قلم', 'دفتر', 'قلم رصاص'];\n$counter = 0;\n\nforeach ($items as $item) {\n    echo "المنتج #{$counter}: {$item}<br>";\n    $counter++;\n}\n?>
\n\n

النتيجة:

\n
المنتج #0: كتاب\nالمنتج #1: قلم\nالمنتج #2: دفتر\nالمنتج #3: قلم رصاص
\n\n

عداد يبدأ من 1

\n

غالبًا ما تحتاج إلى عرض الترقيم للمستخدم بدءًا من 1. يمكنك فعل ذلك بسهولة:

\n\n
<?php\n$tasks = ['غسل الأطباق', 'تمشية الكلب', 'حل الواجبات'];\n$taskNumber = 1;\n\nforeach ($tasks as $task) {\n    echo "المهمة رقم {$taskNumber}: {$task}<br>";\n    $taskNumber++;\n}\n?>
\n\n

التحكم الشرطي في العداد

\n

يتيح لك العداد اليدوي تخطي العناصر أو إعادة تعيين الترقيم:

\n\n
<?php\n$numbers = [1, 2, 0, 3, 4, 0, 5];\n$v                

المدونات

توصيات الكتب