Вопрос

Возможно ли найти foreach индекс?

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

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

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

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

Это было полезно?

Решение

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

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

Другие советы

Вы можете поместить хак в свой 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++;
}

Следует отметить, что вы можете позвонить 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 действуют как таблица map, сопоставляющая ключи со значениями.в некоторых случаях вы можете получить индекс, если ваш массив определен, например

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

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

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

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

  • С помощью $loop->index
  • Я также предварительно увеличиваю его с помощью ++$loop, чтобы начать с 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