Respostas:
foreach($array as $key=>$value) {
// do stuff
}
$key
é o índice de cada $array
elemento
$myarr['foo'] = 'bar';
este método falhar
vatiable++;
a cada iteração. A maneira tradicional, mas sempre funcionou.
Você pode colocar um hack no seu foreach
, como um campo incrementado em cada execução, que é exatamente o que o for
loop fornece em uma matriz indexada numericamente. Esse campo seria um pseudo-índice que precisa de gerenciamento manual (incrementos, etc.).
A foreach
fornecerá seu índice na forma de seu $key
valor; portanto, esse hack não deve ser necessário.
por exemplo, em um 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++;
}
Note-se que você pode chamar key()
qualquer matriz para encontrar a chave atual ativada. Como você pode imaginar current()
, retornará o valor atual e next()
moverá o ponteiro do array para o próximo elemento.
$key
from $key=>$value
) ... No entanto, aposto que o desempenho mais baixo não é significativo / perceptível em um loop simples.
Você pode criar $i
fora do loop e fazer $i++
na parte inferior do loop.
Esses dois loops são equivalentes (exceto as grades de segurança, é claro):
for ($i=0; $i<count($things); $i++) { ... }
foreach ($things as $i=>$thing) { ... }
por exemplo
for ($i=0; $i<count($things); $i++) {
echo "Thing ".$i." is ".$things[$i];
}
foreach ($things as $i=>$thing) {
echo "Thing ".$i." is ".$thing;
}
Eu acho que a melhor opção é a mesma:
foreach ($lists as $key=>$value) {
echo $key+1;
}
é fácil e normalmente
Jonathan está correto. As matrizes PHP atuam como uma tabela de mapeamento de chaves para valores. em alguns casos, você pode obter um índice se sua matriz estiver definida, como
$var = array(2,5);
for ($i = 0; $i < count($var); $i++) {
echo $var[$i]."\n";
}
sua saída será
2
5
nesse caso, cada elemento da matriz possui um índice que pode ser conhecido, mas se você fizer algo como o seguinte
$var = array_push($var,10);
for ($i = 0; $i < count($var); $i++) {
echo $var[$i]."\n";
}
você não obtém saída. Isso acontece porque matrizes no PHP não são estruturas lineares, como na maioria das linguagens. Eles são mais como tabelas de hash que podem ou não ter chaves para todos os valores armazenados. Portanto, o foreach não usa índices para rastrear sobre eles, porque eles só têm um índice se a matriz estiver definida. Se você precisar de um índice, verifique se suas matrizes estão totalmente definidas antes de rastrear sobre elas e use um loop for.
$var[] = 10;
(consulte o link do PHP para orientar), portanto, o segundo for
loop gera os resultados esperados.
Normalmente, faço isso ao trabalhar com matrizes associativas:
foreach ($assoc_array as $key => $value) {
//do something
}
Isso também funcionará bem com matrizes não associativas. $ key será o valor do índice. Se preferir, você também pode fazer isso:
foreach ($array as $indx => $value) {
//do something
}
Gostaria de acrescentar isso, usei isso no laravel apenas para indexar minha tabela:
Meu código:
@foreach($resultsPerCountry->first()->studies as $result)
<tr>
<td>{{ ++$loop->index}}</td>
</tr>
@endforeach
$loop
variável não pode ser usada porque é solicitado o PHP geral.
Eu resolvi dessa maneira, quando tive que usar o índice e o valor foreach no mesmo contexto:
$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
}