将嵌套的 PHP 循环传递给 javascript


Passing nested PHP loop to javascript

我有一个PHP数组,看起来像这样:

([NAME] => Array ( [0] => 16 [1] => 12 [2] => 4 [3] => 0 ))
([NAME2] => Array ( [0] => 19 [1] => 19 [2] => 0 [3] => 0 ))
([NAME3] => Array ( [0] => 31 [1] => 29 [2] => 2 [3] => 0 ))

此数组由 PHP 通过从数据库中提取数据生成。(数组比这大得多,但为了简单起见,我只包含 3 条记录)

我真的需要这些数据在生成条形图的脚本中使用。现在,我只需要名称和第一条记录。所以,例如,在 PHP 中

<?=$array['NAME'][0]?>
<?=$array['NAME2'][0]?>

会从每个回显我需要的信息,但我不确定如何将其放入我需要的 javascript 格式中。

这是我需要的javascript格式:

        { tech: 'NAME', value: $array['NAME'][0] },
        { tech: 'NAME2', value: $array['NAME2'][0] },
        { tech: 'NAME3', value: $array['NAME3'][0] },
        { tech: 'NAME4', value: $array['NAME4'][0] },
        ...etc

首选某种类型的循环,因为名称可能会有所不同。如果只是PHP,我可以做到,但我不太精通Javascript。有人可以帮我想出解决方案吗?

好消息是你不必知道太多的javascript。在 php 中创建所需的数据结构,然后使用 json_encode: http://php.net/manual/en/function.json-encode.php

<?php
        $for_chart = array();
        foreach($names as $key => $name){
           $obj = new stdClass;
           $obj->tech = $key;
           $obj->value = $name[0];
           $for_chart[] = $obj;
        }
    ?>   

结果是:

[{"tech":"NAME","value":1},{"tech":"NAME2","value":5},{"tech":"NAME4","value":9}] 

你可以在你的JavaScript中使用它,就像这样:

<script>
    var my_names = <?=json_encode($for_chart)?>;
    alert(my_names[0].value); // alerts "1"
</script>

http://sandbox.onlinephpfunctions.com/code/2682f09fd5515b220402db9c600b70a0501a87d9

如果你json_encode你拥有的数组,它会得到:

{"NAME1":[16,12,4,0],"NAME2":[19,19,0,0],"NAME3":[31,29,2,0]}

这将给你一个 JavaScript 对象来迭代:

如果 json 对象位于名为 arrayData 的变量中:

var gridData = [];
for (var name in arrayData) {
  var rowObj = { tech: name, value: arrayData[name][0] };
  gridData.append(rowObj);
}

最后,您将拥有一个对象数组,这些对象应该是您在gridData中查找的对象。

如果您以以下格式回显它,则可以 JSON 获取数据:

[{tech: 'NAME', value: $array['NAME'][0]},{tech: 'NAME'

, value: $array['NAME'][0]}]

在你的js中,你可以做如下的事情:

var names = $.getJSON('http://localhost/index.php?name', function(data) {});

这样你就有一个 js 中的数组。

要获取 JavaScript 代码,只需迭代 php 数组,并像您想要的那样回显 json 记录:

<?= foreach($array as $key => $value){
     echo "{ tech: '" .$key ."', value: '" .$value[0] ."'},";
   }
?>
//Assuming this is your array
$getArray["NAME"]   = array(16,12,4,0);
$getArray["NAME2"]  = array(19,19,0,0);
$getArray["NAME3"]  = array(31,29,2,0);
$newArray   = array();
foreach($getArray as $indKey=>$indArrVal) {
    $newArray[] = array("tech"=>$indKey, "value"=>$indArrVal[0]);
}
echo json_encode($newArray);

在这里,创建一个具有所需索引的新数组,然后使用json_encode将其字符串化