【问题标题】:PHP loop including some javaScriptPHP 循环,包括一些 JavaScript
【发布时间】:2014-06-02 08:43:54
【问题描述】:

我有一个 javascript 函数(我从 highcharts 示例中获取),如下所示:

$(function () {    


(...)

series: [{
        name: 'Things',
        colorByPoint: true,
        data: [{
            name: 'Alabama',
            y: 1010,
            drilldown: 'Alabama counties'
        }, {
            name: 'Alaska',
            y: 77,
            drilldown: 'Alaska counties'
        }, {
            name: 'Arizona',
            y: 947,
            drilldown: 'Arizona counties'
        }]

这仅接受阿拉巴马州、阿拉斯加州和亚利桑那州(我正在尝试绘制每个州的死亡人数图)。

我已经成功地将我的 postgres 数据库连接到一个 php 脚本,并且我有两个数组:

$state_name  and $fatalities

我想做某种 lop(for 或 foreach),可以获取状态名称和死亡人数以自动生成更多状态,在系列中......否则我必须一个一个地完成!

我尝试了很多不同的方法,但我的代码是一团糟,我可以知道 php 在哪里结束,而 javaScript 从哪里开始......你能给我一些帮助吗?

所以,我尝试只生成 name 和 y,目前这就是我的想法......

<?php


// Connection parameters
$host = "localhost"; 
$user = "postgres"; 
$pass = "iniciativa2"; 
$db = "crash15042014";


// Connecting...
$con = pg_connect("host=$host dbname=$db user=$user password=$pass")
or die ("Could not connect to server\n");


$query = "select state_id, state_name, sum(noofcrashes) as total
from locationdim locdim, eventfacts ev
where locdim.location_id = ev.location_id
group by locdim.state_id, locdim.state_name
order by locdim.state_id;
";

$rs = pg_query($con, $query) or die("Cannot execute query: $query\n");


$state_name = array();
$deaths = array();



while ($row = pg_fetch_assoc($rs)) {
array_push($state_name, $row['state_name']);
array_push($deaths, $row['total']);
}

print_r($state_name);
echo "<br>";
print_r($deaths);

//This is fine      


pg_close($con); 


// From here, I have no clue...
for ($i = 0; $i <= 56; $i++) { ?>

            name: <?php "'". echo $state_name[$i] . "'"; ?>,
            y: <?php echo $deaths[$i]; ?>,
            drilldown: <?php "'". echo $state_name[$i] . "counties'"; ?>

<?php } ?>

【问题讨论】:

  • 你试过使用json_encode / json_decode吗?
  • 代码乱码能不能分享一下
  • 我已经编辑给你看...我还尝试在 foreach 循环中使用 $array = array('name:'=>$state_name[$i], 'y:' =>$deaths[$i] 然后 json_encode($array) 但我不太确定我在做什么......这对我来说是新的......
  • 即使乱码也可以分享。否则,只需考虑使用 json_encode() 和 json_decode() 函数,它们会让你的生活更轻松
  • 您可以拥有一个数组并在查询循环中向其添加值,如下所示: $state_name = $row['state_name']; $result_array["$state_name"]['state'] = $state_name; $result_array["$state_name"]['deaths'][] = $row['deaths'];那么至少你有一个状态 => 死亡总数对的数组。

标签: javascript php for-loop highcharts


【解决方案1】:

我建议为 PHP 中的 javascript 创建整个 data 数组。例如

$death_data = array();
while ($row = pg_fetch_assoc($rs)) {
   $death_data[] = array(
      'name' => $row['state_name'],
      'y' => $row['total'],
      'drilldown' => $row['state_name'] + ' counties', //Work out what you want here
   );
}

然后通过 JSON 格式将其传递给 javascript,并创建一个可用于系列的 javascript 数组。示例(问题未标记为 jQuery,但您从示例中显示为使用 jQuery,所以我使用了它。如果您不使用 jQuery,则必须找到 $.parseJSON 的替代品,但其余的都成立):

$(函数(){

(...)

var death_data = $.parseJSON('<?php echo json_encode($death_data); ?>');

series: [{
    name: 'Things',
    colorByPoint: true
    data: death_data

【讨论】:

  • 到底是什么$.parseJSON('&lt;?php echo json_encode($death_data); ?&gt;');
  • 随便var death_data = &lt;?php echo json_encode($death_data); ?&gt;
  • PHP 以 JSON 格式回显一个字符串。 $.parseJSON 获取该字符串(自从 PHP 将它写在那里以来,它被视为静态字符串)并解析它以在 javascript 中重新创建一个数组/对象。 $.parseJSON 是一个 jQuery 函数,但 vanilla js 中也有选项。
  • 我对此并不陌生。您正在序列化并立即反序列化。直接回显 JSON。 JSON 中的 JS 表示 Javascript。您可以将其直接回显到 javascript 中。
  • 是的,你可以。但是在我看来,把它变成一个字符串并重新解析它更安全。在我看来,直接回显它相当于使用 eval 而不是 JSON。但是,是的,两者都有效。这是一个问题的情况是边缘情况 - 我的习惯是通过 parseJSON。无论您是回显它还是使用 parseJSON,答案的核心都是相同的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-09
  • 1970-01-01
  • 1970-01-01
  • 2016-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多