Biel. 9 Denunciar post Postado Agosto 12, 2016 Bom dia a todos. Direto ao ponto. Pessoal o EX 1 abaixo exibe na tela 2016 ate 2030 Gostaria que o EX 2 exibisse na tela na ordem crescente todos os meses do ano assim janeiro fevereiro março abril maio junho julho agosto setembro outubro novembro dezembro EX 1 <?php $final = '2030'; for($inicio = '2016'; $inicio <= $final; $inicio++){ echo $inicio.'<br />'; } ?> EX 2 <?php $final = ''; for($inicio = ''; $inicio <= $final; $inicio++){ echo $inicio.'<br />'; } ?> <?php $mes = date("n"); $meses = array( "janeiro", "fevereiro", "março", "abril", "maio", "junho", "julho", "agosto", "setembro", "outubro", "novembro", "dezembro"); echo '<h1>'.$meses[$mes].'</h1>'; ?> Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Agosto 12, 2016 Use a lógica. Você quer todos os meses desde 2016 até 2030. Mas quer que os meses sejam em "ordem". Primeiro todos os janeiros, depois todos os fevereiros.Ou seja, passe primeiro os anos e depois os meses: $date = \DateTime::createFromFormat('d' , '01');// Vai pegar o ano e mês atuais no dia primeiro. $datePeriod = new \DatePeriod($date, new \DateInterval('P1Y') , new \DateTime('2030-12-31')); foreach($datePeriod as $date) { echo $date->format('m'); } Agora, adicione a exibição dos meses em um laço de repetição para que calcule o próximo mês até o ano 2030: do { /** código de cálculos dos meses até 2030 **/ $date->add(new \DateInterval('P1M')); // adiciona um mês a data } while (/** condição para término **/); E, por último, mas não menos importante, quando for dezembro, se adicionar um novo mês, ele vai para janeiro do ano seguinte. Então valide se o ano não é maior que o ano atual: $lastDayOfCurrentYear = new \DateTime('last day of year'); E a bibliteca DateTime permite validação strict: $date <= $lastDayOfCurrentYear; Compartilhar este post Link para o post Compartilhar em outros sites
Biel. 9 Denunciar post Postado Agosto 12, 2016 Gabriel Heming, não quero todos os meses desde 2016 até 2030 . Gostaria que exibisse na tela na ordem crescente os meses de janeiro a dezembro, nada mais. Assim janeiro fevereiro março abril maio junho julho agosto setembro outubro novembro dezembro Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Agosto 12, 2016 A lógica continua a mesma, qual a sua dificuldade? Compartilhar este post Link para o post Compartilhar em outros sites
Biel. 9 Denunciar post Postado Agosto 12, 2016 Acho que agora vou explicar melhor . Valos lá: O EX a abaixo exibe na tela na ordem crescente de janeiro até dezembro Gostaria de saber se tem como obter o mesmo resultado do exemplo EX a resumindo o código, sem precisar criar tantas variáveis. Achei que usando FOR ou WHILE dava pra fazer. Nota: Assim não serve. Achei que usando FOR ou WHILE dava pra fazer <?php $variavel = 'janeiro'. '<br />'. 'fevereiro' . '<br />' . 'março' . '<br />' . 'abril'.'<br />' . 'maio'.'<br />'. 'junho'.'<br />'. 'julho'.'<br />'. 'agosto'.'<br />'. 'setembro'.'<br />'. 'outubro'.'<br />'. 'novembro'.'<br />'. 'dezembro'.'<br />'; echo $variavel ?> EX a <?php $janeiro = 'janeiro'.'<br />'; $fevereiro = 'fevereiro'.'<br />'; $março = 'março'.'<br />'; $abril = 'abril'.'<br />'; $maio = 'maio'.'<br />'; $junho = 'junho'.'<br />'; $julho = 'julho'.'<br />'; $agosto = 'agosto'.'<br />'; $setembro = 'setembro'.'<br />'; $outubro = 'outubro'.'<br />'; $novembro = 'novembro'.'<br />'; $dezembro = 'dezembro'.'<br />'; echo $janeiro.$fevereiro.$março.$abril.$maio.$junho.$agosto.$setembro.$outubro.$novembro.$dezembro; ?> Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Agosto 12, 2016 Usando strftime() juntamente com setlocale() você obtém o nome do mês em pt-br. Só precisará um loop de 1 a 12 e um echo dentro dele :) Compartilhar este post Link para o post Compartilhar em outros sites
Biel. 9 Denunciar post Postado Agosto 12, 2016 Usando strftime() juntamente com setlocale() você obtém o nome do mês em pt-br. Só precisará um loop de 1 a 12 e um echo dentro dele :) Beraldo o que eu quero fazer é isso: Se eu digitar qualquer mes de janeiro a dezembro no campo input abaixo, vai cortar, essa é a idéia impedir de cadastrar. Achei que usando FOR ou WHILE dava pra fazer Gostaria de saber se tem como obter o mesmo resultado do EX 1 abaixo sem precisar repetir a $ano 12 vezes EX 1 <input type="text" name="ano" value="" /> <?php $ano = $_POST['ano']; $ano = str_replace("janeiro" , "" , $ano); $ano = str_replace("fevereiro" , "" , $ano); $ano = str_replace("março" , "" , $ano); $ano = str_replace("abril" , "" , $ano); $ano = str_replace("maio" , "" , $ano); $ano = str_replace("junho" , "" , $ano); $ano = str_replace("julho" , "" , $ano); $ano = str_replace("agosto" , "" , $ano); $ano = str_replace("setembro" , "" , $ano); $ano = str_replace("outubro" , "" , $ano); $ano = str_replace("novembro" , "" , $ano); $ano = str_replace("dezembro" , "" , $ano); ?> Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Agosto 12, 2016 A cada post sua dúvida fica mais obscura... :unsure: Se você fizer todos esses str_replace, você vai apagar os meses da string. É melhor você reformular (mais uma vez) sua dúvida e esclarecer exatamente qual é o seu objetivo Compartilhar este post Link para o post Compartilhar em outros sites
Biel. 9 Denunciar post Postado Agosto 12, 2016 A cada post sua dúvida fica mais obscura... :unsure: Se você fizer todos esses str_replace, você vai apagar os meses da string. É melhor você reformular (mais uma vez) sua dúvida e esclarecer exatamente qual é o seu objetivo Beraldo essa é a ideia mesmo apagar os meses da string. A cada post sua dúvida fica mais obscura... :unsure: Se você fizer todos esses str_replace, você vai apagar os meses da string. É melhor você reformular (mais uma vez) sua dúvida e esclarecer exatamente qual é o seu objetivo Beraldo, o exemplo abaixo, se eu digitar no input qualquer ano de 2016 ate 2030 vai cortar, essa é a ideia cortar mesmo. Quero fazer a mesma coisa com mes de janeiro a dezembro usando for ou while ou do while <input type="text" name="mes" value="" /> $mes = $_POST['mes']; $final = "2030"; for($inicio = "2016"; $inicio <= $final; $inicio++){ //echo $inicio.'<br />'; $mes = str_replace($inicio , "" , $mes); } Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Agosto 12, 2016 Mas então nem precisa de loop... Basta passar um array no primeiro parâmetro de str_replace $str = "01 de janeiro de 2016, 01 de fevereiro de 2016, 01 de março de 2016"; $str = str_replace([ 'janeiro', 'fevereiro', 'março', // ... ], '', $str); echo $str; Compartilhar este post Link para o post Compartilhar em outros sites
Biel. 9 Denunciar post Postado Agosto 12, 2016 Mas então nem precisa de loop... Basta passar um array no primeiro parâmetro de str_replace $str = "01 de janeiro de 2016, 01 de fevereiro de 2016, 01 de março de 2016"; $str = str_replace([ 'janeiro', 'fevereiro', 'março', // ... ], '', $str); echo $str; Beraldo colocando todos os meses na $meses não funcionou $ano = $_POST['ano']; $meses = ("janeiro,fevereiro,março,abril,maio,junho,julho,agosto,setembro,outubro,novembro,dezembro"); $ano = str_replace($meses, "" , $ano); Agora assim de forma individual funciona $ano = $_POST['ano']; $mes = ("janeiro"); $ano = str_replace($mes, "" , $ano); //$ano = str_replace("janeiro", "" , $ano); Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Agosto 12, 2016 Você não definiu um arrray. Você definiu uma string com todos os meses. Arrays são definidos com colchetes, não parênteses. Siga o modelo que postei e não terá problemas Compartilhar este post Link para o post Compartilhar em outros sites
Biel. 9 Denunciar post Postado Agosto 12, 2016 Você não definiu um arrray. Você definiu uma string com todos os meses. Arrays são definidos com colchetes, não parênteses. Siga o modelo que postei e não terá problemas Beraldo fiz dar forma que você sugeriu e não deu certo. Gostaria que me mostrasse onde estou errando. Tentei de varias formas e nada! :( Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Agosto 13, 2016 Beraldo fiz dar forma que você sugeriu e não deu certo. Como fez? Por que não deu certo? Deu erro? Qual? Descreva o problema. Sem isso é impossível ajudar... É só pegar o código que postei e digitar os outros meses: $str = "01 de janeiro de 2016, 01 de fevereiro de 2016, 01 de março de 2016"; $str = str_replace([ 'janeiro', 'fevereiro', 'março', 'abril', 'maio', // ... ], '', $str); echo $str; Dê uma lida nestes links: http://php.net/str_replace http://php.net/manual/pt_BR/language.types.array.php Compartilhar este post Link para o post Compartilhar em outros sites
Biel. 9 Denunciar post Postado Agosto 13, 2016 Obrigado Beraldo. Sua dica me levou ao caminho certo. Fiz assim e funcionou $meses = array("janeiro" , "fevereiro" , "março", "abril", "maio" , "junho", "julho", "agosto", "setembro" , "outubro" , "novembro" , "dezembro"); $nome = str_replace($meses, "" , $nome ); echo $nome .'<br/>'; // não imprime nada porque a ideia é cortar mesmo. Compartilhar este post Link para o post Compartilhar em outros sites