Подтвердить что ты не робот

Как найти индекс foreach?

Можно ли найти индекс foreach?

в цикле for следующим образом:

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

$i даст вам индекс.

Нужно ли использовать цикл for или есть способ получить индекс в цикле foreach?

4b9b3361

Ответ 1

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

$key - это индекс каждого элемента $array

Ответ 2

Вы можете поместить хак в свой foreach, например, поле, увеличивающееся при каждом прохождении, что точно соответствует циклу for в массиве с числовой индексацией. Таким полем будет псевдоиндекс, который требует ручного управления (приращения и т.д.).

A 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++;
}

Ответ 3

Следует отметить, что вы можете вызвать key() в любом массиве, чтобы найти текущий ключ. Как вы можете догадаться, current() вернет текущее значение, а next() переместит указатель массива на следующий элемент.

Ответ 4

У Оуэна есть хороший ответ. Если вам нужен только ключ, и вы работаете с массивом, это также может быть полезно.

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

Ответ 5

Вы можете создать $i вне цикла и сделать $i++ в нижней части цикла.

Ответ 6

Эти две петли эквивалентны (например, безопасные перила):

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;
}

Ответ 7

Я думаю, что лучший вариант такой же:

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

легко и обычно

Ответ 8

В массивах PHP есть внутренние указатели, поэтому попробуйте следующее:

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

Работает хорошо для меня (только очень предварительно протестировано).

Ответ 9

Джонатан прав. Массивы 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.

Ответ 10

Обычно я это делаю при работе с ассоциативными массивами:

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

Это будет отлично работать с неассоциативными массивами. $key будет значением индекса. Если вы предпочитаете, вы также можете сделать это:

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

Ответ 11

Я хотел бы добавить это, я использовал это в laravel, чтобы просто проиндексировать мою таблицу:

  • С $loop-> индексом
  • Я также преинкрементую c++$loop, чтобы начать с 1

Мой код:

@foreach($resultsPerCountry->first()->studies as $result)
  <tr>
    <td>{{ ++$loop->index}}</td>                                    
  </tr>
@endforeach

Ответ 12

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

Ответ 13

foreach($arrvariable as $key=>$value){
echo "$key";
}