PHP数组进入JS数组

时间:2014-03-17 15:12:20

标签: php arrays

不可否认,我对数组的理解最好是初级的(虽然在此之前我认为我已经弄清楚了)。

基本上,我正在尝试将PHP数组转换为JS数组。这样做的目的是最终我想使用jquery创建一个图形/图表(我已经尝试过使用php图表,但是到目前为止我们还没有为我工作)。

长话短说,每次我尝试将我的PHP数组转换为JS数组时,输出都是“null”。这可能是由于我对数组的理解......

//this query gets me the count of each type of variabletype

$sql = "SELECT variabletype, COUNT(variabletype) AS value_occurrence FROM variable GROUP BY variabletype ORDER BY value_occurrence DESC";
$vars_query = mysqli_query($con,$sql) or die(mysqli_error($con));

 while($vars = mysqli_fetch_array($vars_query, MYSQLI_ASSOC)) 
    {

//this is a sub-query that gets me how many of those records are considered "positive"
$times_positive_qry = mysqli_query($con, "SELECT variable.variabletype, COUNT(value.valueid) AS positive_occurrence FROM variable INNER JOIN value On variable.variableid=value.variableid WHERE variable.variabletype = '" .$vars['variabletype']. "' AND value.valuelift>0.00 AND value.valuesignificant=1 GROUP BY variable.variabletype ORDER BY positive_occurrence DESC");
$times_positive = mysqli_fetch_array($times_positive_qry, MYSQLI_ASSOC);
$pos = $times_positive['positive_occurrence'];

}

//this is the code that is supposed to take my php array and turn it into JS array.
 echo "<script type='text/javascript'>";
 $php_array = $pos;
 $js_array = json_encode($php_array);
 echo "var javascript_array = ". $js_array . ";\n";
 echo "</script>";

同样,我对数组的理解是初级的,但我认为这可能与我使用$ pos有关。这不是阵列吗?或者我在其他地方错过了标记?

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:3)

您可以将$ pos显式声明为如下数组:

$pos = array();

在while循环中,您可以确保它是一个数组,并且在使用如下括号迭代循环时不会丢失数据:

$pos[] = $times_positive['positive_occurrence'];

该语法自动创建索引数组。如果你不使用那个语法,那么$ pos的值将只是在while语句的最后一个循环中赋值的值。

答案 1 :(得分:1)

你有这一行:

$pos = $times_positive['positive_occurrence'];

它为变量$pos赋值。您分配的值可能不是数组,但此外,每次在循环中都会覆盖$ pos。

所以我认为你打算这样做:

$pos[] = $times_positive['positive_occurrence'];

这会将$pos视为一个数组,并将每个新值附加到数组的末尾。

您可能希望通过编写$pos = array();来启动脚本。这样,你确保$ pos已经存在并且是一个有效的(空)数组,以防查询没有返回任何结果。

答案 2 :(得分:0)

这可能是您想要的解决方案。

  1. 在while循环之前只声明$ pos = array();
  2. 并在while循环中使用$ pos作为$ pos []
  3. ,你的javascript看起来像这样:

    <script type='text/javascript'>
    <?php
    //this is just and example you can replace it with $pos[]
    $php_array = array('abc','def','ghi');
    ?>
    var js_array =<?php echo json_encode($php_array);?>;//do not add quotes to this line
    alert(js_array[0]);
    </script>