Можно ли найти индекс foreach
?
в цикле for
следующим образом:
for ($i = 0; $i < 10; ++$i) {
echo $i . ' ';
}
$i
даст вам индекс.
Нужно ли использовать цикл for
или есть способ получить индекс в цикле foreach
?
Можно ли найти индекс 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;
}
Я думаю, что лучший вариант такой же:
foreach ($lists as $key=>$value) {
echo $key+1;
}
легко и обычно
В массивах PHP есть внутренние указатели, поэтому попробуйте следующее:
foreach($array as $key => $value){
$index = current($array);
}
Работает хорошо для меня (только очень предварительно протестировано).
$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 ($assoc_array as $key => $value) {
//do something
}
Это будет отлично работать с неассоциативными массивами. $key будет значением индекса. Если вы предпочитаете, вы также можете сделать это:
foreach ($array as $indx => $value) {
//do something
}
Я хотел бы добавить это, я использовал это в laravel, чтобы просто проиндексировать мою таблицу:
Мой код:
@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";
}