我有两个看起来像这样的PHP字符串(明显缩短了问题):
$year [
[0]=>2003
[1]=>2003
[2]=>2004
[3]=>2004
[4]=>2005
[5]=>2005
]
$cost [
[0]=>200
[1]=>300
[2]=>400
[3]=>500
[4]=>410
[5]=>510
]
我需要将上面的PHP数组转换为完全如下格式的JAVASCRIPT数组:
var newData=[
['2003', 200,300],
['2004', 400,500],
['2005', 410,510]
];
当我隐式输入JS数组时(如上所述)一切正常(即图形渲染正确)。然而,经过几个小时的尝试不同的方法,我无法弄清楚如何动态地生成newData数组(即从PHP数组,如图所示)完全显示的JS数组格式。
答案 0 :(得分:1)
您的任务可分为两个任务:
首先,您想要组合两个数组。我想你想根据他们拥有的密钥来做这件事。 PHP中有多种功能,如array_combine
或array_reduce
。
然而对于你的情况,最简单的方法是for_each循环,因为你在$ year数组中有重复的值。
$combined_array = [];
foreach ($year as $id => $year_val) {
if (!array_key_exists($year_val, $combined_array)) {
$combined_array[$year_val] = [(string)$year_val];
}
$combined_array[$year_val][] = $cost[$id];
}
现在你有多年的钥匙,你不想要的,所以你可以使用array_values
再次移除钥匙。
$combined_array = array_values($combined_array);
第二项任务非常简单:转到PHP文件,该文件加载要为其提供数组的脚本。在加载脚本之前添加它:
<script>
var myPhpArray = <?php echo json_encode($combined_array) ?>;
</script>
之后,可以在变量`myPhpArray。
中从JS访问PHP数组答案 1 :(得分:1)
如果您尊重示例中的结构,则可以执行以下操作:
<?php
$year = [
0 => 2003,
1 => 2003,
...
];
$cost = [
0 => 200,
1 => 300,
...
];
for($i=0;$i<SIZE_OF_ARRAY;$i+=2)
$newData[] = [(string) $year[$i], $cost[$i], $cost[$i+1]];
?>
现在在你需要的代码的javascript部分:
<script>
var newData = <?= json_encode($newData); ?>
</script>
请注意,我没有使用php代码之间的引号,因为我确实希望javascript将php输出解析为javascript代码而不是javascript字符串。
答案 2 :(得分:1)
感谢所有帮助。你的答案显示我正在以正确的方式处理事情(json_encode等)。然而,发生的事情是生成PHP数组的遗留系统没有纠正整数而不是字符串的值。收件人插入所需的INT - 请参阅问题中的输出数组格式
所以json_encoding php数组工作正常 - 但它是编码字符串而不是INT数据值。修正了现在一切似乎都很好。
PS如果你看一下原始问题,你会看到JS中的OP数组需要两种数据类型。当然,它只是得到了字符串。那里的课程肯定!
继承人的片段
var a = ['1','2','3'];
var result = a.map(function (x) {
return parseInt(x, 10);