Ir para conteúdo

POWERED BY:

Arquivado

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

Gantuz

Condição com arrays

Recommended Posts

Boa Tarde pessoal,

 

Estou com uma pequena dúvida, porém não stou conseguindo resolver por completo. Eu preciso fazer uma condição para um array, onde um novo array receberá um por um os valora do array anterior, sendo que SE o valor recebido do anterior for igual ao que já tenho no array novo este deverá receber o valor e acrescentar "_001", onde esse "_001" é a representação de vezes que aquele valor se repetiu.

 

Exemplo prático:

 

Digamos que eu tenha uma array chamado $primeiroArray e seu valor atual é:

 

0=>cereja

1=>manga

2=>uva

3=>melao

4=>maca

5=>melao

6=>uva

7=>cereja

8=>banana

9=>melao

10=>cereja

11=>laranja

12=>cereja

13=>uva

14=>maca

15=>pera

 

Agora eu crio um novo array chamado $segundoArray = array( );

 

eu preciso que todos os valores de $primeiroArray passe para $segundoArray, sendo que, nota-se que existe várias frutas que se repetiram, certo?!

 

Então, aí que vem a charada:

 

Eu preciso de algo do tipo - Quando $segundoArray for receber os valores de $primeiroArray, preciso que $segundoArray fique desta forma a seguir:

 

0=>cereja

1=>manga

2=>uva

3=>melao

4=>maca

5=>melao_001

6=>uva_001

7=>cereja_001

8=>banana

9=>melao_002

10=>cereja_002

11=>laranja

12=>cereja_003

13=>uva_002

14=>maca_002

15=>pera

 

Então é essa minha dúvida pessoal. Espero que tenha sido claro, Agradeço quaisquer ajuda!!!!!

 

Muito Obrigado,

 

Gabriel Antunes http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem que ser nesta ordem ?

 

0=>cereja

1=>manga

2=>uva

3=>melao

4=>maca

5=>melao_001

6=>uva_001

7=>cereja_001

8=>banana

9=>melao_002

10=>cereja_002

11=>laranja

12=>cereja_003

13=>uva_002

14=>maca_002

15=>pera

 

 

OBS: maça só existem duas.. e na segunda ocorrência ela está _002 isto está correto ? não seria _001 ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Interessante, to quase conseguindo aki brother. lembra dakela lógica q te passei certa vez?

Mais ou menos aquilo..

Lembro, mais tem haver???? Lembro-me que era pra poder fazer um loop para ler arquivos...

 

Eu to fazendo esse loop pra poder pegar o valor de um e por em outro, só que o meu maior problema é que não devo está fazendo corretamente a condição IF, pois ou ele faz para todos e coloca o "_001" para todos ou não coloca para nenhum.

 

Eu estou tentando construir algo deste tipo aqui:

 

if(!in_array($totalData,$varNova)){

array_push($varNova,array_pop($totalData));

}

 

Mas tipo, ele até funciona, mas quando faço uma cláusula para poder dizer }else{ e fazer a concatenação com o _001,_002... Ou eu faço uma condição em que ele ou coloca para todos _00X ou não coloca nada... Por isso que to achando que é problema no IF que to fazendo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem que ser nesta ordem ?

 

0=>cereja

1=>manga

2=>uva

3=>melao

4=>maca

5=>melao_001

6=>uva_001

7=>cereja_001

8=>banana

9=>melao_002

10=>cereja_002

11=>laranja

12=>cereja_003

13=>uva_002

14=>maca_002

15=>pera

 

 

OBS: maça só existem duas.. e na segunda ocorrência ela está _002 isto está correto ? não seria _001 ?

 

 

 

É... isso mesmo, _001 eu que contei errado... rsrsrs. Não pow, precisa ser nesta ordem não, digamos que eu tenha esta ordem no array, mas se utilizar um sort($primeiroArray) ordena tudo e pode fazer sem problemas!!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem que ser nesta ordem ?

 

0=>cereja

1=>manga

2=>uva

3=>melao

4=>maca

5=>melao_001

6=>uva_001

7=>cereja_001

8=>banana

9=>melao_002

10=>cereja_002

11=>laranja

12=>cereja_003

13=>uva_002

14=>maca_002

15=>pera

 

 

OBS: maça só existem duas.. e na segunda ocorrência ela está _002 isto está correto ? não seria _001 ?

 

Eu to sentindo, que o problema está na condição do IF... to tentando ler um array e jogar cada valor dentro de outro e se ele encontrar em todo array algum valor anterior ele acrescentar _001,_002,_003...

 

eu tentei algo assim:

 

for( . . . ){

if(!in_array($totalData,$varNova)){

array_push($varNova,array_pop($totalData));

}

else{

...

}

}

...

 

Valeu Parcero!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então.. não sei do jeito que tu ta fazendo, mas por exemplo..

tu tem q fazer assim..

tu tem essa string:

 

$string="a-b-c-d-a-b-a-b-f-g-h";

 

Como se fosse um array.. você quer transformar essa em:

 

$string2="a-b-c-d-a001-b001-a002-b002-f-g-h";

 

como se a $string fosse um array tu vai contar quantos elementos ela tem q fazer um loop com a quantidade deles..

aí tu faz um loop dentro desse loop.. por exemplo:

 

a primeira posição vai ser "a", aí dentro do primeiro loop tu faz otro com a quantidade fazendo assim.

 

a é igual a b?

a é igual a c?

a é igual a d?

a é igual a a?

.....

 

faz as condições e pula pro proximo

 

b é igual a c?

b é igual a d?

b é igual a a?

b é igual a b?

...

é o jeito que achei de tu checar se existem outras iguais..

 

To quase conseguindo aki.. se tu não conseguir te posto pra você adaptar..

 

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então.. não sei do jeito que tu ta fazendo, mas por exemplo..

tu tem q fazer assim..

tu tem essa string:

 

$string="a-b-c-d-a-b-a-b-f-g-h";

 

Como se fosse um array.. você quer transformar essa em:

 

$string2="a-b-c-d-a001-b001-a002-b002-f-g-h";

 

como se a $string fosse um array tu vai contar quantos elementos ela tem q fazer um loop com a quantidade deles..

aí tu faz um loop dentro desse loop.. por exemplo:

 

a primeira posição vai ser "a", aí dentro do primeiro loop tu faz otro com a quantidade fazendo assim.

 

a é igual a b?

a é igual a c?

a é igual a d?

a é igual a a?

.....

 

faz as condições e pula pro proximo

 

b é igual a c?

b é igual a d?

b é igual a a?

b é igual a b?

...

é o jeito que achei de tu checar se existem outras iguais..

 

To quase conseguindo aki.. se tu não conseguir te posto pra você adaptar..

 

Abraço!

 

Valeu parceiro... vou tentar aqui, caso não consiga eu aviso a ti, mas acho que entendi. Vou dar uma olhada aqui.

 

Valeu mesmo camarada! Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu acho que array_filter e fazer uma função bem legal funciona

 

array_filter? Vou dar uma olhada aqui... qualquer coisa dou um berro!

 

Valeu!!! Abraços!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

$primeiroArray = array(
0=>"cereja",
1=>"manga",
2=>"uva",
3=>"melao",
4=>"maca",
5=>"melao",
6=>"uva",
7=>"cereja",
8=>"banana",
9=>"melao",
10=>"cereja",
11=>"laranja",
12=>"cereja",
13=>"uva",
14=>"maca",
15=>"banana");

function ve_se_tem($var)
{
	if($var=="banana")
	echo "tem ".$var;
}

array_filter($primeiroArray, "ve_se_tem");

//Imprimir na tela "tem Banana"

é só fazer isto com o IF do Portella

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui deu.. ;]

 

Testa ae no localhost pra ver se é o que quer. .

 

$a="l-l-m-m-m-m-n-n-o-o";

$b=explode("-",$a);

$c=count($B);

$i=1;

for($d=0;$d<=$c;$d++)

{

if($entra[$d]!='')

{

continue;

}

else

{

for($x=$d+1;$x<=$c;$x++)

{

if($b[$x]==$b[$d])

{

$entra[$x]="-".$b[$d]."00".$i;

$i++;

}

}

$i=1;

}

}

for($d=0;$d<=$c;$d++)

{

if($entra[$d]!='')

{

$array.=$entra[$d];

}

else

{

$array.="-".$b[$d];

}

}

echo $array;

 

Abraço!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Finalizado

 

OBS: tira o ECo e coloca array.

xD

Realizei apenas algumas modificações do código do Portella

$primeiroArray = array(
0=>"cereja",
1=>"manga",
2=>"uva",
3=>"melao",
4=>"maca",
5=>"melao",
6=>"uva",
7=>"cereja",
8=>"banana",
9=>"melao",
10=>"cereja",
11=>"laranja",
12=>"cereja",
13=>"uva",
14=>"maca",
15=>"pera");

$a = implode("-",$primeiroArray);

$b=explode("-",$a);
$c=count($b);
$i=1;
for($d=0;$d<=$c;$d++)
{
	$i=1;
	if($entra[$d]!='')	{
	//	$i=1;
	}else{
		for($x=$d+1;$x<=$c;$x++){
				if($b[$x]==$b[$d]){
					$entra[$x]="-".$b[$d]."00".$i;
					$i++;
				}
		}
 	}	
}
	for($d=0;$d<=$c;$d++)
	{
		if($entra[$d]!=''){
			$array.=$entra[$d];
		}else{
			$array.="-".$b[$d];
		}
	}
echo str_replace("-","<br>",$array);

Compartilhar este post


Link para o post
Compartilhar em outros sites

achei um erro ali.. agora deu certo de vdd. hehe

if($entra[$d]!='')

{

continue;

}

e $i=1; fora do otro for.. ^^

 

Valeeeeeeeeeeeeu MEu parcero... funcionou...!!!!!

 

Fiz alguns reajustes porque você partiu de uma string e levou a um array, eu jah tinha que trabalhar com um array direto, e ainda usei uma condição pra 3 digitos, 2 digitos e 1 digito! (Ex.: 001, 011, 111). Mas pow, funcionou redondo!!!!!

 

Valeu mesmo!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Finalizado

 

OBS: tira o ECo e coloca array.

xD

Realizei apenas algumas modificações do código do Portella

$primeiroArray = array(
0=>"cereja",
1=>"manga",
2=>"uva",
3=>"melao",
4=>"maca",
5=>"melao",
6=>"uva",
7=>"cereja",
8=>"banana",
9=>"melao",
10=>"cereja",
11=>"laranja",
12=>"cereja",
13=>"uva",
14=>"maca",
15=>"pera");

$a = implode("-",$primeiroArray);

$b=explode("-",$a);
$c=count($b);
$i=1;
for($d=0;$d<=$c;$d++)
{
	$i=1;
	if($entra[$d]!='')	{
	//	$i=1;
	}else{
		for($x=$d+1;$x<=$c;$x++){
				if($b[$x]==$b[$d]){
					$entra[$x]="-".$b[$d]."00".$i;
					$i++;
				}
		}
 	}	
}
	for($d=0;$d<=$c;$d++)
	{
		if($entra[$d]!=''){
			$array.=$entra[$d];
		}else{
			$array.="-".$b[$d];
		}
	}
echo str_replace("-","<br>",$array);

 

 

 

Valeu Renatooooowwwwwww!!!!! Funcionado redondo, nem precisei utilizar o array_filter. E não usei o implode, explode, como já estava como array, tratei ele como array mesmo!!!! Mas ta redondinho... do jeito que estava pensando, e ainda adaptei para 1, ou 2 ou 3 digitos!!!!

 

Pow, valeu mesmo!!!! Abraços!!!!

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.