6

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

27

Вопрос: Возможно ли получить индекс в цикле foreach?

Я имею следующий код, где использую цикл for:

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

В данном случае переменная $i содержит индекс, который я могу использовать.

Однако, мне интересно, могу ли я получить аналогичный индекс в цикле foreach, или мне обязательно нужно использовать цикл for для этой задачи? Спасибо!

5 ответ(ов)

12

В данном коде цикл foreach используется для итерации по массиву $array. Переменная $key представляет индекс текущего элемента массива, а $value - это значение этого элемента. Таким образом, внутри цикла вы можете обрабатывать каждый элемент массива, используя как его индекс, так и его значение. Например:

foreach($array as $key => $value) {
    // Здесь $key — индекс элемента массива, а $value — его значение.
}

Таким образом, вы можете выполнять необходимые операции для каждого элемента массива поочередно.

2

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

Тем не менее, foreach предоставляет вам индекс в виде значения вашего $key, и поэтому такой "хак" обычно не нужен.

Например, в примере с foreach:

$index = 0;
foreach($data as $key => $val) {
    // Используйте $key как индекс, или...

    // ... управляйте индексом таким образом...
    echo "Индекс равен $index\n";
    $index++;
}

В этом примере вы можете как использовать значение $key в качестве индекса, так и управлять своим собственным индексом, если это необходимо. Однако проще и более эффективно использовать встроенные возможности foreach для работы с индексами.

0

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

foreach(array_keys($array) as $key) {
    // делаем что-то
}

Это позволит вам пройтись по всем ключам массива и выполнять необходимые действия с каждым из них.

0

Вы можете создать переменную $i вне цикла и инкрементировать её с помощью $i++ внизу цикла.

0

Ваш код, который использует цикл foreach, имеет единственную проблему: при использовании $key + 1 вы не учитываете, что ключи массива могут не начинаться с 0 или могут быть другими числами. Если вы хотите, чтобы результат просто увеличивался на 1 для каждого элемента, то лучше использовать функцию array_keys() для получения последовательных индексов. Вот пример, как этого можно достичь:

foreach ($lists as $idx => $value) {
    echo $idx + 1; // Здесь $idx - это индекс текущего элемента
}

Этот подход проще и понятнее, так как каждый элемент будет нумероваться от 1. Также вы можете просто использовать встроенную функцию для получения индексов, если вам это необходимо.

Код остается простым и чистым, но при этом более безопасным, так как не будет зависеть от значений ключей массива.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь