Jetro Postado Janeiro 24, 2008 Denunciar Share Postado Janeiro 24, 2008 Olá PessoalEstou precisando escrever um valor por extenso...Consegui um código legal...<?phpfunction extenso($valor=0, $maiusculas=false) { $singular = array("centavo", "real", "mil", "milhão", "bilhão", "trilhão", "quatrilhão"); $plural = array("centavos", "reais", "mil", "milhões", "bilhões", "trilhões", "quatrilhões"); $c = array("", "cem", "duzentos", "trezentos", "quatrocentos", "quinhentos", "seiscentos", "setecentos", "oitocentos", "novecentos"); $d = array("", "dez", "vinte", "trinta", "quarenta", "cinquenta", "sessenta", "setenta", "oitenta", "noventa"); $d10 = array("dez", "onze", "doze", "treze", "quatorze", "quinze", "dezesseis", "dezesete", "dezoito", "dezenove"); $u = array("", "um", "dois", "três", "quatro", "cinco", "seis", "sete", "oito", "nove"); $z=0; $valor = number_format($valor, 2, ".", "."); $inteiro = explode(".", $valor); for($i=0;$i<count($inteiro);$i++) for($ii=strlen($inteiro[$i]);$ii<3;$ii++) $inteiro[$i] = "0".$inteiro[$i]; $fim = count($inteiro) - ($inteiro[count($inteiro)-1] > 0 ? 1 : 2); for ($i=0;$i<count($inteiro);$i++) { $valor = $inteiro[$i]; $rc = (($valor > 100) && ($valor < 200)) ? "cento" : $c[$valor[0]]; $rd = ($valor[1] < 2) ? "" : $d[$valor[1]]; $ru = ($valor > 0) ? (($valor[1] == 1) ? $d10[$valor[2]] : $u[$valor[2]]) : ""; $r = $rc.(($rc && ($rd || $ru)) ? " e " : "").$rd.(($rd && $ru) ? " e " : "").$ru; $t = count($inteiro)-1-$i; $r .= $r ? " ".($valor > 1 ? $plural[$t] : $singular[$t]) : ""; if ($valor == "000")$z++; elseif ($z > 0) $z--; if (($t==1) && ($z>0) && ($inteiro[0] > 0)) $r .= (($z>1) ? " de " : "").$plural[$t]; if ($r) $rt = $rt . ((($i > 0) && ($i <= $fim) && ($inteiro[0] > 0) && ($z < 1)) ? ( ($i < $fim) ? ", " : " e ") : " ") . $r; } if(!$maiusculas){ return($rt ? $rt : "zero"); } else { return (ucwords($rt) ? ucwords($rt) : "Zero"); } } echo extenso(165.98);?>...Só que, quando coloco dentro de um loop do Select, dá o erro:Fatal error: Cannot redeclare extenso() (previously declared in /home/acapvida/www/php/extenso.php:2) in /home/acapvida/www/php/extenso.php on line 40Chamo de "Loop do select" o seguinte:$sql = mysql_query("SELECT * FROM cad where data = '$venci' ");while($ler = mysql_fetch_array($sql)){ $id =$ler2["id]; $idl =$ler2["idl"]; function extenso(..... etc...}Alguém pode me ajudar?Abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ESerra Postado Janeiro 24, 2008 Denunciar Share Postado Janeiro 24, 2008 Você não pode declarar duas funções com o mesmo nome, isso gera o erro, você está tentando criar a função N vezes dentro do laço, e com o mesmo nome, sempre vai dar esse erro...Se você quiser o valor por extenso deve apenas chamar "echo extenso( VALOR )" (onde VALOR é um número), e não function extenso... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jetro Postado Janeiro 29, 2008 Autor Denunciar Share Postado Janeiro 29, 2008 Você não pode declarar duas funções com o mesmo nome, isso gera o erro, você está tentando criar a função N vezes dentro do laço, e com o mesmo nome, sempre vai dar esse erro...Se você quiser o valor por extenso deve apenas chamar "echo extenso( VALOR )" (onde VALOR é um número), e não function extenso...Mais uma vez obrigado meu E-guru...Problema Resolvido.Abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Jetro
Olá Pessoal
Estou precisando escrever um valor por extenso...
Consegui um código legal...
...Só que, quando coloco dentro de um loop do Select, dá o erro:
Fatal error: Cannot redeclare extenso() (previously declared in /home/acapvida/www/php/extenso.php:2) in /home/acapvida/www/php/extenso.php on line 40
Chamo de "Loop do select" o seguinte:
$sql = mysql_query("SELECT * FROM cad where data = '$venci' ");
while($ler = mysql_fetch_array($sql))
{
$id =$ler2["id];
$idl =$ler2["idl"];
function extenso(..... etc...
}
Alguém pode me ajudar?
Abraço
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.