Gantuz 0 Denunciar post Postado Fevereiro 27, 2009 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
PortellaSP 0 Denunciar post Postado Fevereiro 27, 2009 Interessante, to quase conseguindo aki brother. lembra dakela lógica q te passei certa vez? Mais ou menos aquilo.. Compartilhar este post Link para o post Compartilhar em outros sites
Renato Siroma 2 Denunciar post Postado Fevereiro 27, 2009 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
Gantuz 0 Denunciar post Postado Fevereiro 27, 2009 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
Gantuz 0 Denunciar post Postado Fevereiro 27, 2009 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
Gantuz 0 Denunciar post Postado Fevereiro 27, 2009 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
PortellaSP 0 Denunciar post Postado Fevereiro 27, 2009 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
Renato Siroma 2 Denunciar post Postado Fevereiro 27, 2009 eu acho que array_filter e fazer uma função bem legal funciona Compartilhar este post Link para o post Compartilhar em outros sites
Gantuz 0 Denunciar post Postado Fevereiro 27, 2009 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
Gantuz 0 Denunciar post Postado Fevereiro 27, 2009 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
Renato Siroma 2 Denunciar post Postado Fevereiro 27, 2009 $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
PortellaSP 0 Denunciar post Postado Fevereiro 27, 2009 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
PortellaSP 0 Denunciar post Postado Fevereiro 27, 2009 imprime: -l-l001-m-m001-m002-m003-n-n001-o-o001- Só adaptar pra tirar o tracinho do primeiro e do último..^^ Compartilhar este post Link para o post Compartilhar em outros sites
PortellaSP 0 Denunciar post Postado Fevereiro 27, 2009 achei um erro ali.. agora deu certo de vdd. hehe if($entra[$d]!='') { continue; } e $i=1; fora do otro for.. ^^ Compartilhar este post Link para o post Compartilhar em outros sites
Renato Siroma 2 Denunciar post Postado Fevereiro 27, 2009 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
Gantuz 0 Denunciar post Postado Fevereiro 27, 2009 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
Gantuz 0 Denunciar post Postado Fevereiro 27, 2009 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
PortellaSP 0 Denunciar post Postado Fevereiro 27, 2009 de nada brother. Com as suas duvidas eu aprendo bastante.. hehe Vlw tbm!! Compartilhar este post Link para o post Compartilhar em outros sites