Вопрос
Возможно ли найти 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";
}