Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

pedradegelo

[Resolvido] adicionar indice ao array em tempo de execução

Recommended Posts

Olá pessoal,

 

digamos:

$fields = array(0=> "a", 1 => "b", 2 => "c");

 

durante um foreach por ex, tem como adicionar mais um

valor e percorrer durante a excução do mesmo?

 

tipo assim (so que desse jeito nao funciona):

foreach($fields as $field)
{
  if($field == "c"}
  {
     $fields[3] = "d";
  }
  echo $field;
}

 

dai imprimiria abcd...ao inves de abc

 

Grato pessoal,

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

$fields = array(0=> "a", 1 => "b", 2 => "c");

 

durante um foreach por ex, tem como adicionar mais um

valor e percorrer durante a excução do mesmo?

 

tipo assim (so que desse jeito nao funciona):

foreach($fields as $field)

{

if($field == "c"}

{

$fields[3] = "d";

}

echo $field;

}

 

dai imprimiria abcd...ao inves de abc

 

Bom amigo, o foreach não vai funcionar porque um iterator para a matriz é recuperado antes do início da execução do laço, por isso qualquer coisa que for adicionada na sua matriz durante o loop não será visível dessa forma, de uma olhada em ArrayObject::getIterator()

 

Porém você conseguirá resolver isso sem usar o foreach, com um for normal:

 

$fields = array( "a" , "b" , "c" );

for (; $field = current( $fields ) ; next( $fields ) ){
    if ( $field == "c" ) $fields[] = "d";

    var_dump( $field );
}

A saída será:

 

string(1) "a"
string(1) "b"
string(1) "c"
string(1) "d"

Porém você DEVE tomar muito cuidado porque esse é o tipo de iteração que causa loops infinitos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

poxa colega, bacana hein!

não tinha sacado esse tipo de laço ainda...super maneiro.

 

tava sem net aqui...dai fui quebrar a cabeça...

dai eu acabei por resolver assim (meio gambiarroso..kkk,

já que era pra apenas uma ocorrencia):

 

$fields = array( "a" , "b" , "c" );

foreach($fields as $field)
{
	if($field == "c")
	{
		$fields[3] = "d";
	}
	echo $field;
	
	if(isset($fields[3]))
	{
		echo $fields[3];
	}
}

Obs: Na programação c++2 q eu ainda vou inventar,

vai dar pra fazer sussa...sem gambiarra..kkkk

 

Abraços e obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.