Как найти индекс foreach
можно найти ?
на for
петли следующим образом:
for ($i = 0; $i < 10; ++$i) {
echo $i . ' ';
}
$i
даст вам индекс.
Я должен использовать for
цикл или есть какой-то способ получить индекс в foreach
петли?
12 ответов
вы можете поставить Хак в вашем foreach
, например, поле, увеличенное на каждом прогоне, что именно то, что for
loop дает вам численно индексированный массив. Такое поле будет псевдо-индексом, который требует ручного управления (инкременты и т. д.).
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
}
эти две петли эквивалентны (бар перила безопасности, конечно):
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 действуют как ключи сопоставления таблиц карт со значениями. в некоторых случаях вы можете получить индекс, если массив определен, например,
$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
}