keeperval 0 Denunciar post Postado Outubro 23, 2009 como eu posso diminuir a sintaxe desta operação? if (substr($filename,-4) == ".jpg" or substr($filename,-4) == ".jpeg" or substr($filename,-4) == ".gif" or substr($filename,-4) == ".png") Compartilhar este post Link para o post Compartilhar em outros sites
Dee 0 Denunciar post Postado Outubro 23, 2009 switch(substr($filename,4) { case 'jpg': //comandos break; case 'jpeg': //comandos break; case 'gif': //comandos break; case 'png': //comandos break; } Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Outubro 23, 2009 $array = array('jpg','jpeg','gif','png'); if (in_array(substr($filename,-4),$array)) http://br.php.net/in_array Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
Tash 5 Denunciar post Postado Outubro 23, 2009 Só uma observação chata: Sintaxe é o conjunto de expressões "gramaticais" de uma linguagem, você não diminui ou aumenta isso alterando código-fonte. O que você quer é simplificar seu código, torná-lo mais elegante ;) Compartilhar este post Link para o post Compartilhar em outros sites
jpraminelli 3 Denunciar post Postado Outubro 23, 2009 dadas as opçoes acima ainda prefira usar o if ai vai uma opção.... if ((substr($filename,-4) == ".jpg") || (substr($filename,-4) == ".jpeg") || (substr($filename,-4) == ".gif") ||(substr($filename,-4) == ".png")) Compartilhar este post Link para o post Compartilhar em outros sites
lucasmartins 6 Denunciar post Postado Outubro 23, 2009 dadas as opçoes acima ainda prefira usar o if ai vai uma opção.... if ((substr($filename,-4) == ".jpg") || (substr($filename,-4) == ".jpeg") || (substr($filename,-4) == ".gif") ||(substr($filename,-4) == ".png")) Concordo plenamente... Se você está achando muito desorganizado o código, pode quebrar a linha assim: if ((substr($filename,-4) == ".jpg") || (substr($filename,-4) == ".jpeg") || (substr($filename,-4) == ".gif") || (substr($filename,-4) == ".png")) { } Eu acho que o if é mais otimizado aí... Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Outubro 23, 2009 Em questao de velocidade, o switch eh mais rapido do que uma cadeia de ifs, ou um if com varios OUs. Compartilhar este post Link para o post Compartilhar em outros sites
lucasmartins 6 Denunciar post Postado Outubro 23, 2009 Em questao de velocidade, o switch eh mais rapido do que uma cadeia de ifs, ou um if com varios OUs. Mas o cara vai ter que ficar repetindo comando em cada caso, isso é ruim, porq imagina q são muitos comandos???? ah não ser q ele faça uma função ali dentro dos casos... Por isso, o if ficaria melhor aí... pq pelo q eu to vendo, o cara só quer validar se oq ta vindo do upload é mesmo uma imagem... é uma validação!!! Não tem pq fazer o switch neste caso... Compartilhar este post Link para o post Compartilhar em outros sites
goruks 0 Denunciar post Postado Outubro 23, 2009 o switch eh mais rapido por causa do break se for um JPG ele ja para no primeiro case por isso bom colocar tb os mais usados primeiro usando expressao regular nao ficaria mais rapido? Compartilhar este post Link para o post Compartilhar em outros sites
Tash 5 Denunciar post Postado Outubro 23, 2009 o switch eh mais rapido por causa do breakse for um JPG ele ja para no primeiro case por isso bom colocar tb os mais usados primeirousando expressao regular nao ficaria mais rapido? Condições também param se verdadeiras. Se você executar: if ((substr($filename,-4) == ".jpg") || (substr($filename,-4) == ".jpeg") || (substr($filename,-4) == ".gif") ||(substr($filename,-4) == ".png")) E for um jpg, ele nem tentará as próximas. De qualquer forma, a velocidade é insignificante pra ser percebida... a maneira mais elegante é a do Matias: $array = array('.jpg','.jpeg','.gif','.png'); if (in_array(substr($filename,-4),$array)); Compartilhar este post Link para o post Compartilhar em outros sites
lucasmartins 6 Denunciar post Postado Outubro 23, 2009 Condições também param se verdadeiras. Se você executar: if ((substr($filename,-4) == ".jpg") || (substr($filename,-4) == ".jpeg") || (substr($filename,-4) == ".gif") ||(substr($filename,-4) == ".png")) É, os caras estão não tão me entendendo, ... para que switch? Utiliza logo o if... oq importa é a performance e simplicidade, não a estética do código... quando a estética, é so tabular bem o código... Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Dee 0 Denunciar post Postado Outubro 23, 2009 quanto mimimi eh lucasmartins.com.br eh soh tabular o codigo no switch da msma forma que faria no if :facepalm: Compartilhar este post Link para o post Compartilhar em outros sites
lucasmartins 6 Denunciar post Postado Outubro 23, 2009 quanto mimimi eh lucasmartins.com.br eh soh tabular o codigo no switch da msma forma que faria no if :facepalm: Cara, eu acho muito estranho usar switch para validar... mas tudo bem... fazem como quiserem =} estou tentando ajudar... Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Outubro 23, 2009 Eu acredito que a idéia do "dono" do tópico é que se pudesse fazer algo assim... if (substr($filename,-4) == ".jpg" or ".jpeg" or ".gif" or ".png") Só que isto NÃO FUNCIONA (infelizmente, porque ia facilitar em alguns momentos). Era isto? Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Outubro 24, 2009 O maior problema é o uso repetido de uma função que retorna o mesmo valor, como ela irá retornar sempre o mesmo valor o uso dessa forma só irá trazer perda de desempenho, se o resultado dela será SEMPRE o mesmo, então o ideal é guardar o valor: if ( ( ( $ext = substr($filename,-4) ) == '.jpg' ) || ( $ext == '.jpeg' ) || ( $ext == '.gif' ) || ( $ext == '.png' ) ){ echo 'ok'; } else echo 'Não sei q arquivo é esse'; De qualquer forma, esse método não irá funcionar (não por termos guardado o valor da variável) mas porque, apesar de (.jpg, .gif, .png) terem todos 4 caracteres, .jpeg tem 5 e como foi definido no substr para pegar apenas os 4 últimos, ela irá falhar sempre para essa extensão. Um outro problema desse método é que o usuário pode enviar um arquivo com a extensão maiúscula (ex: .JPG, .PNG, .GIF) e a não ser que você tenha ifs para todas as situações ou então converta o nome do arquivo para minúsculas antes da verificação, esse método irá falhar também. 1a. Sugestão if ( ( ( $ext = strtolower(end(explode('.',$filename))) ) == 'jpg' ) || ( $ext == 'jpeg' ) || ( $ext == 'gif' ) || ( $ext == 'png' ) ){ echo 'ok'; } else echo 'Não sei q arquivo é esse'; 2a. Sugestão if ( preg_match( '/\.(?:jp(e)?g|gif|png)/i' , $filename ) ){ echo 'ok'; } else echo 'Não sei q arquivo é esse'; Compartilhar este post Link para o post Compartilhar em outros sites