Ответы:
foreach($array as $key=>$value) {
// do stuff
}
$key
индекс каждого $array
элемента
$myarr['foo'] = 'bar';
этот метод не удался
vatiable++;
на каждой итерации. Традиционный способ, но всегда работал.
Вы можете поместить в свой хак 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()
переместит указатель массива на следующий элемент.
$key
from $key=>$value
) ... Однако я держу пари, что низкая производительность незначительна / ощутима в простом цикле.
Вы можете создать $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-массивы действуют как таблица сопоставления ключей для значений. в некоторых случаях вы можете получить индекс, если ваш массив определен, например:
$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.
$var[] = 10;
(см. Руководство по PHP-ссылке), поэтому второй for
цикл выводит ожидаемые результаты.
Обычно я делаю это при работе с ассоциативными массивами:
foreach ($assoc_array as $key => $value) {
//do something
}
Это будет хорошо работать и с неассоциативными массивами. Ключ $ будет значением индекса. Если вы предпочитаете, вы можете сделать это тоже:
foreach ($array as $indx => $value) {
//do something
}
Я хотел бы добавить это, я использовал это в laravel, чтобы просто проиндексировать мою таблицу:
Мой код:
@foreach($resultsPerCountry->first()->studies as $result)
<tr>
<td>{{ ++$loop->index}}</td>
</tr>
@endforeach
$loop
Переменная не может быть использована , так как просили общего PHP.
Я решил это так, когда мне пришлось использовать индекс и значение foreach в одном контексте:
$array = array('a', 'b', 'c');
foreach ($array as $letter=>$index) {
echo $letter; //Here $letter content is the actual index
echo $array[$letter]; // echoes the array value
}//foreach
foreach(array_keys($array) as $key) {
// do stuff
}