Можно ли найти foreach
индекс?
в for
цикле следующим образом:
for ($i = 0; $i < 10; ++$i) {
echo $i . ' ';
}
$i
даст вам индекс.
Нужно ли использовать for
цикл или есть какой-то способ получить индекс в foreach
цикле?
foreach($array as $key=>$value) {
// do stuff
}
$key
индекс каждого $array
элемента
$myarr['foo'] = 'bar';
этот метод не удалсяvatiable++;
на каждой итерации. Традиционный способ, но всегда работал.Вы можете поместить в свой хак
foreach
, например, поле, увеличиваемое при каждом проходе, что в точности иfor
дает цикл в числовом индексированном массиве. Такое поле будет псевдоиндексом, который требует ручного управления (приращения и т. Д.).A
foreach
даст вам ваш индекс в форме вашего$key
значения, поэтому такой взлом не должен быть необходимым.например, в
foreach
источник
Следует отметить, что вы можете вызвать
key()
любой массив, чтобы найти текущий ключ, для которого он включен. Как вы можете догадатьсяcurrent()
, вернет текущее значение иnext()
переместит указатель массива на следующий элемент.источник
$key
from$key=>$value
) ... Однако я держу пари, что низкая производительность незначительна / ощутима в простом цикле.Оуэн имеет хороший ответ. Если вам нужен только ключ, и вы работаете с массивом, это также может быть полезно.
источник
foreach(array_keys($array) as $index=>$key)
.Вы можете создать
$i
вне цикла и сделать$i++
в нижней части цикла.источник
Эти две петли эквивалентны (конечно, за исключением перил безопасности):
например
источник
Я думаю, что лучший вариант такой же:
это легко и нормально
источник
Джонатан прав. PHP-массивы действуют как таблица сопоставления ключей для значений. в некоторых случаях вы можете получить индекс, если ваш массив определен, например:
ваш вывод будет
в этом случае каждый элемент в массиве имеет понятный индекс, но если вы затем делаете что-то вроде следующего
вы не получите выход. Это происходит потому, что массивы в PHP не являются линейными структурами, как в большинстве языков. Они больше похожи на хеш-таблицы, которые могут иметь или не иметь ключи для всех сохраненных значений. Следовательно, foreach не использует индексы для обхода, потому что они имеют индекс, только если массив определен. Если вам нужен индекс, убедитесь, что ваши массивы полностью определены, прежде чем переходить по ним, и используйте цикл for.
источник
$var[] = 10;
(см. Руководство по PHP-ссылке), поэтому второйfor
цикл выводит ожидаемые результаты.Массивы PHP имеют внутренние указатели, поэтому попробуйте это:
Работает хорошо для меня (только очень предварительно проверено, хотя).
источник
Обычно я делаю это при работе с ассоциативными массивами:
Это будет хорошо работать и с неассоциативными массивами. Ключ $ будет значением индекса. Если вы предпочитаете, вы можете сделать это тоже:
источник
Я хотел бы добавить это, я использовал это в laravel, чтобы просто проиндексировать мою таблицу:
Мой код:
источник
$loop
Переменная не может быть использована , так как просили общего PHP.Я решил это так, когда мне пришлось использовать индекс и значение foreach в одном контексте:
источник
источник