Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
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!
>
$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"}
{
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 ) ){
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.