【问题标题】:How To Store PHP Array In Javascript Array And Display?如何将 PHP 数组存储在 Javascript 数组中并显示?
【发布时间】:2021-08-28 22:21:44
【问题描述】:

我尝试使用 json_encode 将 PHP 数组存储为 javascript 数组,但是当我尝试显示 javascript 数组或引用它的索引时,它显示为空或未定义。

我基本上想要做的是获取四个不同的 PHP 数组($lids、$dates、$prices、$scaledPrices)并将它们组合成一个数组,这样这个新数组的每个元素都包含来自每个原来的四个数组(即new_array = [[5001, 2020-01-01, $100.00, $110.00], [5002, 2020-01-021, $103.45, $103.23], ...]

我能够成功地使用 MultipleIterator 功能来正确组合四个 PHP 数组,因为此显示正确,但我似乎无法将其存储在 javascript 数组中。有什么建议吗?

how to assign php array values to javascript array

// initialize php arrays to populate and use for chart
$dates = array_column($priceData, 'date');
$scaledPrices = array_column($priceData, 'scaledP');

// arrays used for chart must be reversed and json_encoded
$chart_dates = json_encode(array_reverse($dates));
$chart_scaledPrices = json_encode(array_reverse($scaledPrices));

// initialize $lids and $prices arrays to use for download
$lids = array_column($priceData, 'lid');
$prices = array_column($priceData, 'price'); 

// combine $lids, $dates, $prices, and $scaledPrices into one array
$csv_lids = new ArrayIterator($lids);
$csv_dates = new ArrayIterator($dates);
$csv_prices = new ArrayIterator($prices);
$csv_scaledPrices = new ArrayIterator($scaledPrices);

$csv_data = new MultipleIterator(MultipleIterator::MIT_KEYS_NUMERIC);
$csv_data->attachIterator($csv_lids);
$csv_data->attachIterator($csv_dates);
$csv_data->attachIterator($csv_prices);
$csv_data->attachIterator($csv_scaledPrices);

// this correctly loops through and displays the new array
foreach ($csv_data as $item) {
    echo "<pre>";
    print_r($item);
    echo "</pre>";
}

?> 

<!-- store php csv array as javascript array variable -->
<script>
    // var js_csv_data = new Array();

    var js_csv_data = <?php echo json_encode($csv_data); ?>

    // this shows as an emtpy object . . . even without JSON.stringify
    console.log(JSON.stringify(js_csv_data));
    // this shows as undefined . . . even without JSON.stringify
    console.log(JSON.stringify(js_csv_data[0]));
</script>

【问题讨论】:

  • 如果你只是console.log(js_csv_data)会发生什么?你能发布输出吗?
  • console.log((js_csv_data)) 只输出一个空对象。但我将尝试以下 Cubakos 的建议

标签: javascript php arrays arrayiterator


【解决方案1】:

js_csv_data 显示为空对象,因为 $csv_dataMultipleIterator 类型的对象,“实际上”是一个空数组。

您可以在$csv_data 上使用var_dump() 来检查这一点(或使用highlight_string("&lt;?php\n\$csv_data =\n" . var_export($csv_data, true) . ";\n"); 漂亮地打印转储

它会告诉你这个:

<?php
$team =
MultipleIterator::__set_state(array(
));

MultipleIterator 对象仅遍历所有附加的迭代器,并且只有在您遍历对象时才能访问实际数据。

因此,为了将所有数据作为 json 传递,您应该首先将它们收集到一个数组中。您已经有了循环,因此,只需添加以下内容:


// Init data holder array
$all_csv_data_arr = [];

// this correctly loops through and displays the new array
foreach ($csv_data as $item) {
    echo "<pre>";
    print_r($item);
    echo "</pre>";
    
    $all_csv_data_arr[] = $item;

}

现在,在javascript部分,你应该使用JSON.parse来解析你的数据,这将是数组数组的形式:

    var js_csv_data = <?php echo json_encode($all_csv_data_arr); ?>

编辑: console.log(JSON.parse(js_csv_data)); JSON.parse 不需要,因为 js_csv_data 已经包含格式良好的 JSON 对象。

【讨论】:

  • 非常感谢Cubakos的解决方案和解释。我能够 console.log 只是 js_csv_data 并根据需要正确查看数组数组。还需要使用 JSON.parse 吗?
  • 嗯,是的,有必要使用JSON.parsejs_csv_data,因为它现在是一个JSON 字符串,你不能用它做太多事情。如果您尝试访问js_csv_data 的内容,例如尝试在控制台中写入js_csv_data[0],您会发现您没有获得您想要的表格数据。为了真正能够访问表数据,您必须首先解析 JSON 字符串。例如var js_csv_data = JSON.parse(&lt;?php echo json_encode($all_csv_data_arr); ?&gt;);。然后在控制台中再次尝试js_csv_data[0] 将返回第一个数组数据。
  • 我明白了。再次感谢古巴科斯的帮助。
  • 我正在对此进行测试,但我不断收到此错误。知道为什么吗? Uncaught SyntaxError: Unexpected token , in JSON at JSON.parse () at group.php?FID=16:231 ``` ```
  • 奇怪的是,当我取下 JSON.parse 时,它​​显示正常(整个数组和索引 0 处的数组)。 ``` var js_csv_data = ; console.log("测试");控制台.log(js_csv_data); console.log(js_csv_data[0]); ```
猜你喜欢
  • 2016-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-15
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多