PHP数组到JS数组和重组

时间:2017-11-26 00:16:30

标签: javascript php arrays

我有两个看起来像这样的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数组格式。

3 个答案:

答案 0 :(得分:1)

您的任务可分为两个任务: 首先,您想要组合两个数组。我想你想根据他们拥有的密钥来做这件事。 PHP中有多种功能,如array_combinearray_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);