سؤال

هل من الممكن العثور على foreach فِهرِس؟

في for حلقة على النحو التالي:

for ($i = 0; $i < 10; ++$i) {
   echo $i . ' ';
}

$i سوف أعطيك الفهرس.

هل يجب علي استخدام for حلقة أم أن هناك طريقة ما للحصول على الفهرس في ملف foreach حلقة؟

هل كانت مفيدة؟

المحلول

foreach($array as $key=>$value) {
    // do stuff
}

$key هو مؤشر كل $array عنصر

نصائح أخرى

يمكنك وضع الاختراق في الخاص بك foreach, ، مثل زيادة الحقل في كل مرة، وهو بالضبط ما for Loop يمنحك مصفوفة مفهرسة عدديا.سيكون مثل هذا الحقل عبارة عن فهرس زائف يحتاج إلى إدارة يدوية (الزيادات، وما إلى ذلك).

أ foreach سوف أعطيك الفهرس الخاص بك في شكل $key القيمة، لذلك لا ينبغي أن يكون مثل هذا الاختراق ضروريًا.

على سبيل المثال، في أ foreach

$index = 0;
foreach($data as $key=>$val) {
    // Use $key as an index, or...

    // ... manage the index this way..
    echo "Index is $index\n";
    $index++;
}

تجدر الإشارة إلى أنه يمكنك الاتصال key() على أي مجموعة للعثور على المفتاح الحالي الخاص به.كما يمكنك تخمين current() سوف يعود القيمة الحالية و next() سيحرك مؤشر المصفوفة إلى العنصر التالي.

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

foreach(array_keys($array) as $key) {
//  do stuff
}

ثستطيع ان تخلق $i خارج الحلقة والقيام به $i++ في الجزء السفلي من الحلقة.

هاتان الحلقتان متكافئتان (باستثناء حواجز الأمان بالطبع):

for ($i=0; $i<count($things); $i++) { ... }

foreach ($things as $i=>$thing) { ... }

على سبيل المثال

for ($i=0; $i<count($things); $i++) {
    echo "Thing ".$i." is ".$things[$i];
}

foreach ($things as $i=>$thing) {
    echo "Thing ".$i." is ".$thing;
}

تحتوي مصفوفات PHP على مؤشرات داخلية، لذا جرب ما يلي:

foreach($array as $key => $value){
   $index = current($array);
}

يعمل بشكل جيد بالنسبة لي (تم اختباره بشكل أولي فقط).

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

$var = array(2,5);

for ($i = 0; $i < count($var); $i++) {
    echo $var[$i]."\n";
}

سيكون الناتج الخاص بك

2
5

في هذه الحالة، يكون لكل عنصر في المصفوفة فهرس يمكن معرفته، ولكن إذا قمت بعد ذلك بشيء مثل ما يلي

$var = array_push($var,10);

for ($i = 0; $i < count($var); $i++) {
    echo $var[$i]."\n";
}

لا تحصل على أي إخراج.يحدث هذا لأن المصفوفات في PHP ليست هياكل خطية كما هي الحال في معظم اللغات.إنها أشبه بجداول التجزئة التي قد تحتوي أو لا تحتوي على مفاتيح لجميع القيم المخزنة.وبالتالي لا يستخدم foreach الفهارس للزحف عليها لأنها تحتوي على فهرس فقط إذا تم تعريف المصفوفة.إذا كنت بحاجة إلى فهرس، فتأكد من تعريف صفائفك بالكامل قبل الزحف إليها، واستخدم حلقة for.

أعتقد أن الخيار الأفضل هو نفسه:

foreach ($lists as $key=>$value) {
    echo $key+1;
}

إنه سهل وعادي

أفعل هذا عادةً عند العمل مع المصفوفات الترابطية:

foreach ($assoc_array as $key => $value) {
 //do something
}

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

foreach ($array as $indx => $value) {
  //do something
}

أود أن أضيف هذا، لقد استخدمت هذا في Laravel لفهرسة الجدول الخاص بي فقط:

  • مع $loop->index
  • أقوم أيضًا برفعها مسبقًا باستخدام حلقة ++$ للبدء عند 1

رمز بلدي:

@foreach($resultsPerCountry->first()->studies as $result)
  <tr>
    <td>{{ ++$loop->index}}</td>                                    
  </tr>
@endforeach
foreach(array_keys($array) as $key) {
//  do stuff
}
foreach($arrvariable as $key=>$value){
echo "$key";
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top