Eu tenho uma matriz:
$array = array(1,2,3,4,5);
Se eu fosse despejar o conteúdo da matriz, eles ficariam assim:
array(5) {
[0] => int(1)
[1] => int(2)
[2] => int(3)
[3] => int(4)
[4] => int(5)
}
Quando eu percorrer e desmarcar determinadas teclas, o índice será aumentado.
foreach($array as $i => $info)
{
if($info == 1 || $info == 2)
{
unset($array[$i]);
}
}
Posteriormente, se eu fizesse outro despejo agora, ficaria assim:
array(3) {
[2] => int(3)
[3] => int(4)
[4] => int(5)
}
Existe uma maneira adequada de redefinir a matriz para que seus elementos sejam baseados em zero novamente?
array(3) {
[0] => int(3)
[1] => int(4)
[2] => int(5)
}
Tem outro método interessante:
Agora as chaves $ array são redefinidas.
fonte
Use em
array_splice
vez deunset
:Amostra de trabalho aqui .
fonte
foreach
loop. Use o padrãoi Loop
e simplesmente redefina i após uma emenda. Além disso,Working sample here.
não está funcionando.Apenas um aditivo.
Sei que isso é antigo , mas eu queria adicionar uma solução que não vejo que me propusesse. Encontrei essa pergunta enquanto procurava uma solução diferente e imaginei: "Bem, enquanto estou aqui".
Antes de tudo, a resposta de Neal é boa e ótima de usar depois de executar seu loop, no entanto, eu prefiro fazer todo o trabalho de uma só vez. Obviamente, no meu caso específico, tive que fazer mais trabalho do que este exemplo simples aqui, mas o método ainda se aplica. Eu vi onde alguns outros sugeriram
foreach
loops, no entanto, isso ainda deixa você depois do trabalho devido à natureza da besta. Normalmente, sugiro coisas mais simples comoforeach
, no entanto, neste caso, é melhor lembrar boasfor loop
lógicas antiquadas . Basta usari
! Para manter o índice apropriado, basta subtrair dei
após cada remoção de um item da matriz.Aqui está meu exemplo simples e prático :
Saída:
Isso pode ter muitas implementações simples. Por exemplo, meu caso exato exigia a retenção do item mais recente na matriz com base em valores multidimensionais. Eu vou te mostrar o que eu quero dizer:
Saída:
Como você vê, eu manipulo $ i antes da emenda, procurando remover o item anterior, e não o presente.
fonte
Resposta tardia, mas, depois do PHP 5.3, pode ser;
fonte
Ou você pode criar sua própria função que passa a matriz por referência.
Então tudo o que você precisa fazer é ...
... e agora você
$array
está sem os valores inseridos$unsets
e as chaves são redefinidasfonte
100% trabalhando para mim! Após desarmar elementos na matriz, você pode usá-lo para reindexar a matriz
fonte
Eu uso
$arr = array_merge($arr);
para rebase uma matriz. Simples e direto.fonte
Na minha situação, eu precisava reter chaves exclusivas com os valores da matriz, então apenas usei uma segunda matriz:
fonte
unset($arr1)
que o tornará NÃO disponível para repetir no seu loop. 2) Falta o ponto e vírgula na penúltima linha. Este trecho de código não será executado.