如何使数据不在json值0?

时间:2013-09-26 08:35:34

标签: php json

我真的很抱歉我的头衔很糟糕,因为我不知道如何缩短我的问题。 我之前对我正在尝试的事情有点帮助,但现在我再次陷入困境,无法再次离开我的盒子。有帮助的人可以帮我一把。

这些代码有点太长了,所以希望通过措辞可以给出一个想法我想要的东西。

好的,所以我有一个表格让我们说左边的单选按钮让我们的人选择然后提交。 然后我使用了票数/票数并将其输入饼图。然后我意识到如果没有人投票支持左/右/上或者让我们说如果其中一个没有被投票,那么我会得到一个错误,因为数据甚至不在我的data.json文件中。

所以,如果值/数据不在data.json中,我怎么能做出某个选项(左/右/上)0?

抱歉我的英文不好但希望你能理解我想要的东西.....

这是我的代码....当然我跳过了贴身,html标签和东西......

在我的index.php中

<form action="store.php" method="post">

<?php

$music_type = array("pop", "rock", "metallic");

foreach($music_type as $type)
{
    echo $type . '<input type="radio" name="type" value='. $type . '>' . '<br>' . PHP_EOL;
}
?>

在我的store.php中

 <?php
 $file_handle = fopen('data.json', 'a');  
 if($file_handle) {                       
    fwrite(                              
      $file_handle,                     
      json_encode($_POST).PHP_EOL       
      );      
   fclose($file_handle);                 
}
else {
   echo 'Error opening data file.';      
}

$file = file('data.json');          // each line gets added to the $file array

$votes = array();                   // initiate $votes to an array

foreach($file as $line)
{
    // json decode current line
    $vote = json_decode($line, true);   

    // use the vote as the key
    $key = $vote['type'];

    // check if current vote exits. If it does increment vote by 1
    if(isset($votes[ $key ]))
    {
        $votes[ $key ]++;
    }   
    // vote doesn't exist yet. Add vote to votes (creates new key). Initiate vote with 1       
    else
    {
        $votes[ $key ] = 1;
    }

}

echo "<h1>Vote Results</h1>";

foreach($votes as $vote => $count)
{
    echo "<b>$vote</b> has $count votes<br />";
}


  $sum = $votes['metallic'] + $votes['pop'] + $votes['rock'];

  $circle_degree = 360;

  $metallic_pie = $votes['metallic'] / $sum * $circle_degree;

  $pop_pie = $votes['pop'] / $sum * $circle_degree;

  $rock_pie = $votes['rock'] / $sum * $circle_degree;
?>

<canvas id="piechart1" width="400" height="400"></canvas>
<script>
   piechart("piechart1", ["cyan", "yellow", "green"], [ <?php echo $metallic_pie;?>,
                                                        <?php echo $pop_pie;?>,
                                                        <?php echo $rock_pie;?>]);
</script>

我们只能在我的data.json中说

{"type":"rock"}
{"type":"metallic"}
{"type":"metallic"}

我知道有些人说这不是有效的json但是我相信我之前的帖子有人告诉我因为我使用的是收音机而不是复选框等等但我真正的问题是因为我的json只包含这些     { “类型”: “摇滚”}     { “类型”: “金属”} 存在而不是     { “类型”: “弹出”} 我怎样才能使值为0的pop。没有{“type”:“pop”}甚至存在于data.json中,php不会在json中调用任何内容。

希望你明白我的问题是什么,并再次为我糟糕的解释和英语而感到抱歉

1 个答案:

答案 0 :(得分:1)

变化:

$sum = $votes['metallic'] + $votes['pop'] + $votes['rock'];

$circle_degree = 360;

$metallic_pie = $votes['metallic'] / $sum * $circle_degree;

$pop_pie = $votes['pop'] / $sum * $circle_degree;

$rock_pie = $votes['rock'] / $sum * $circle_degree;

要:

$voteM = (empty($votes['metallic'])) ? 0 : (int)$votes['metallic'];
$voteP = (empty($votes['pop']))      ? 0 : (int)$votes['pop'];
$voteR = (empty($votes['rock']))     ? 0 : (int)$votes['rock'];
$sum   = $voteM + $voteP + $voteR;

$circle_degree = 360;
$metallic_pie  = $voteM / $sum * $circle_degree;
$pop_pie       = $voteP / $sum * $circle_degree;
$rock_pie      = $voteR / $sum * $circle_degree;