É possível encontrar o foreach
índice?
em um for
loop da seguinte maneira:
for ($i = 0; $i < 10; ++$i) {
echo $i . ' ';
}
$i
lhe dará o índice.
Preciso usar o for
loop ou existe alguma maneira de obter o índice no foreach
loop?
foreach($array as $key=>$value) {
// do stuff
}
$key
é o índice de cada $array
elemento
$myarr['foo'] = 'bar';
este método falharvatiable++;
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 ofor
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
fonte
Note-se que você pode chamar
key()
qualquer matriz para encontrar a chave atual ativada. Como você pode imaginarcurrent()
, retornará o valor atual enext()
moverá o ponteiro do array para o próximo elemento.fonte
$key
from$key=>$value
) ... No entanto, aposto que o desempenho mais baixo não é significativo / perceptível em um loop simples.Owen tem uma boa resposta. Se você deseja apenas a chave e está trabalhando com uma matriz, isso também pode ser útil.
fonte
foreach(array_keys($array) as $index=>$key)
,.Você pode criar
$i
fora do loop e fazer$i++
na parte inferior do loop.fonte
Esses dois loops são equivalentes (exceto as grades de segurança, é claro):
por exemplo
fonte
Eu acho que a melhor opção é a mesma:
é fácil e normalmente
fonte
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
sua saída será
nesse caso, cada elemento da matriz possui um índice que pode ser conhecido, mas se você fizer algo como o seguinte
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.
fonte
$var[] = 10;
(consulte o link do PHP para orientar), portanto, o segundofor
loop gera os resultados esperados.As matrizes PHP têm ponteiros internos, então tente o seguinte:
Funciona bem para mim (embora apenas muito preliminarmente testado).
fonte
Normalmente, faço isso ao trabalhar com matrizes associativas:
Isso também funcionará bem com matrizes não associativas. $ key será o valor do índice. Se preferir, você também pode fazer isso:
fonte
Gostaria de acrescentar isso, usei isso no laravel apenas para indexar minha tabela:
Meu código:
fonte
$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:
fonte
fonte