Ir para conteúdo
Entre para seguir isso  
Cesar Melo

PHP com Json e Google Charts

Recommended Posts

Olá!

Estou tentando usar o google charts pela primeira vez para tentar exibir um gráfico em uma pagina.

Vou explicar como estou tentando fazer isso...

Tenho uma pagina que faz uma requisição via "ajax"(dataType: json) para outra pagina que roda uma query sql.

O resultado dessa query eu armazeno em um array, que depois utilizo a função "json_encode" para codificar o array no formato json.

Até aí tudo funciona normal, porem o gráfico não é exibido na pagina que faz a requisição por um pequeno detalhe de aspas no array.

Exemplo de resultado:

{"cols":[
   {"label":"grupo","type":"string"},
   {"label":"valor","type":"number"}
],
"rows":[
   {"c":[{"v":"ACESSO REMOTO"},{"v":"5033.99"}]},
   {"c":[{"v":"FORMATACAO"},{"v":"640.00"}]}
]
}

Como deveria ser:

{"cols":[
   {"label":"grupo","type":"string"},
   {"label":"valor","type":"number"}
],
"rows":[
   {"c":[{"v":"ACESSO REMOTO"},{"v":5033.99}]},
   {"c":[{"v":"FORMATACAO"},{"v":640.00}]}
]
}

Repare que nas linhas onde eu tenho "acesso remoto" e "formatação", ao lado seria respectivamente seus valores. É nesse campo "valor" que não deveria aparecer aspas. Mas a função "json_enconde" coloca aspas em todos os campos, e por esse motivo o gráfico não é exibido. Quando removo essas aspas desse campo "valor" manualmente e coloco na pagina, o gráfico é exibido.

Alguem sabe como posso resolver esse problema? Alguem já conseguiu utilizar o charts dessa maneira que estou tentando?

Obs: Como estou utilizando o charts pela primeira vez, segui a documentação do Google Chart com Json.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema que voce esta passando os valores numericos como strings, passe como float

Exemplo "String"

$variable = ['640.00','5033.99'];
$json = [];
foreach ($variable as $key => $value) {
    array_push($json, $value);
}
echo json_encode($json);

Saida seu caso:

["640.00","5033.99"]

Exemplo em Float

$json = [];
foreach ($variable as $key => $value) {
  array_push($json, floatval($value));
}

echo json_encode($json);

Saída

[640,5033.99]

Estude sobre Types, como o PHP é fracamente tipada, tem que forçar o tipo (Cast) para float, antes de enviar para a função json_encode. No seu caso esta sendo passado como string.

Se quiser as casas decimais dos números inteiros mesmo aplicando o float, use number_format.

Detalhes da função Floatval

  • +1 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado Williams Duarte!

Não cheguei a usar esse método, pois contornei o problema de uma maneira mais trabalhosa.

Mas nas proximas telas que eu for usar o google Chart, vou utilizar esse método.

Estive meio afastado desse meu projeto de programação esses meses!!

Mas uma vez, obrigado pela solução!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
Entre para seguir isso  

  • Conteúdo Similar

    • Por edvaldo123
      Olá para todos, preciso de um código em PHP ou HMTL que mostre cotações de moedas, pra colocar em um site de notícias. Vou deixar um link abaixo onde tem exatamente o que preciso, porém queria remover algumas linhas desse código para não identificar seu site de origem.

      http://www.precododolar.com/widgets/cotacao.php
    • Por violin101
      Caros amigos
       
      Gostaria de tirar uma dúvida com os amigos.
       
      No Codeiginter tem como visualizar um arquivo .PDF dentro do sistema ?
       
      Por exemplo:
             o usuário realizou um download do arquivo --> DadosEmpresa.pdf
       
      Quando clicar em cima do arquivo, tem como visualizar em uma página o arquivo ?   E como faria ?
       
      Grato,
       
      Cesar
    • Por Kelven
      Olá pessoal tudo bem?
       
      Então eu quero colocar um formulário de newsletter em um servidor q não tem suporte para php, o negócio é q depois que a pessoa clica em se cadastrar eu quero que ela seja redirecionada para outro site, então gostaria de saber como posso estar fazendo isso usando apenas javascript, jquery ou ajax com o API do Mailchimp? Porque já procurei muito e não achei, só achei em php.
    • Por Ivana_Silva
      Olá a todos que estão lendo!
       
      Preciso de uma função PHP que filtre 2 padrões de campos a partir do caractere barra(|), preservando a linha.
       
      Em uma caixa de texto vou colar valores assim:
      0001|qwerty
      0002|091234
      0003|09164867
      0004|ab12312
      ...
      A caixa de texto:
      <form id="form" name="form" method="post" action=""> <textarea name="lista" type="text" id="lista" cols="48" rows="5" size="600" /></textarea> <br /> <br /> <button type="submit">Separar</button> </form> <?php ?> Quando eu clicar no botão Separar, preciso que o código filtre e mostre apenas as linhas que, após barra " | " possuam números inteiros de 6 e 8 dígitos(sem letras, símbolos ou pontos).
       
      Exemplo:
      Dados colados na caixa de texto:
      0001|qwerty
      0002|091234
      0003|09164867
      0004|ab12312
       
      Dados filtrados após clicar no botão Separar:
      0002|091234
      0003|09164867
       
      Filtrou apenas os campos que após a barra "|" possuem 6 e 8 dígitos(Nem mais nem menos), não é pra filtrar campos com letras ou números e letras, se tiver letra após a barra já descarta... É pra Filtrar e mostrar apenas as linhas que possuem 6 e 8 dígitos após a barra.
      Agradecida se alguém puder ajudar!
       
    • Por RSN
      Boa Noite, 
      Gostaria de saber se existe a possibilidade de gravar além do id do option value outra variavel, para enviar via post.
      <div class="form-group"> <label class="col-md-4 control-label" for="txtgrupo">Tipo de Pagamento : </label> <div class="col-md-4"> <select id="" class="selectpicker" data-live-search="true" name="tipo_pagamento" > <?php $query = mysql_query("SELECT * FROM tipo_pagamento ORDER BY id ASC"); while($result = mysql_fetch_array($query)) { echo '<option value="'.$result["id"].'">'.$result["nome_tipo"].'</option>'; } ?> </select> </div> </div>  
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.