我从现在开始一周就遇到了这个麻烦。我已经在stackoverflow和各种博客上阅读了很多关于我用Google搜索的主题,但我仍然需要你帮助解决这个问题。对于你们中的许多人来说,这是一个愚蠢的问题,所以我很抱歉,因为我对php / javascript语言知之甚少,但我处于学习阶段,我确信你会在这个形成过程中支持我路径。
我的主要问题是将json_encode输出数组转换为可以在javascript中使用的Flot中使用的内容。
我目前的PHP代码如下:
$csv_is_a = str_getcsv(file_get_contents('csv/IS_A.csv'));
$csv_is_q = str_getcsv(file_get_contents('csv/IS_Q.csv'));
for ($i=1, $k=12; $i<12, $k<22; $i++, $k++) {
$JsonArray[] = array( $csv_is_a[$i] => $csv_is_a[$k]);
}
echo '<pre>';
print_r( $JsonArray );
echo '</pre>';
此代码的输出为:
Array (
[0] => Array
(
[2005-09] => 13931
)
[1] => Array
(
[2006-09] => 19315
)
[2] => Array
(
[2007-09] => 24006
)
[3] => Array
(
[2008-09] => 32479
)
[4] => Array
(
[2009-09] => 42905
)
[5] => Array
(
[2010-09] => 65225
)
[6] => Array
(
[2011-09] => 108249
)
[7] => Array
(
[2012-09] => 156508
)
[8] => Array
(
[2013-09] => 170910
)
[9] => Array
(
[2014-09] => 182795
)
)
现在我应用json_encode:
$csv_enc = json_encode( $JsonArray );
这个输出是:
[{"2005-09":"13931"},{"2006-09":"19315"},{"2007-09":"24006"},{"2008-09":"32479"},{"2009-09":"42905"},{"2010-09":"65225"},{"2011-09":"108249"},{"2012-09":"156508"},{"2013-09":"170910"},{"2014-09":"182795"}]
但我想要的是:
[[2005-09, 13931],[2006-09, 19315],[2007-09, 24006],[2008-09, 32479],[2009-09, 42905],[2010-09, 65225],[2011-09, 108249],[2012-09, 156508],[2013-09, 170910],[2014-09, 182795]]
在代码的javascript部分,我尝试以这种方式使用JSON.parse():
<script type="text/javascript">
var data = JSON.parse(<?php echo $csv_enc ;?>);
$(document).ready(function() {
$.plot($("#placeholder"), [data]);
});
</script>
但它不起作用。如果我替换&#34; JSON.parse()&#34;使用二维对象,脚本可以正常工作。所以,麻烦应该只是在代码的那一部分。您的意见中的问题是什么? 感谢您的支持。
更新:
我已经使用了@callback建议的代码,但它不起作用。这是:
<script type="text/javascript">
var theArray = <?php echo $csv_enc; ?>, multiArray = [];
for(var i = 0 ; i< theArray.length ; i++){
var obj = theArray[i];
for( k in obj) {
multiArray[i] = [k, parseInt(obj[k])];
}
}
console.log(multiArray)
$(document).ready(function() {
$.plot($("#placeholder"), [multiArray]);
});
</script>
console.log不打印任何内容......
答案 0 :(得分:0)
考虑到theArray
是您的输入数组(对象数组)而multiArray
是您需要的数组数组,您可以这样做:
var theArray = [{"2005-09":"13931"},{"2006-09":"19315"},{"2007-09":"24006"},{"2008-09":"32479"},{"2009-09":"42905"},{"2010-09":"65225"},{"2011-09":"108249"},{"2012-09":"156508"},{"2013-09":"170910"},{"2014-09":"182795"}], multiArray = [];
for(var i = 0 ; i< theArray.length ; i++){
var obj = theArray[i];
for( k in obj) {
multiArray[i] = [k, parseInt(obj[k])];
}
}
console.log(multiArray)
这将按如下方式(在控制台中)打印您的数组:
[["2005-09", 13931],["2006-09", 19315],["2007-09", 24006],["2008-09", 32479], ...]
我不知道Flot是否关心multiArray
中每个数组的第一个值中的引号,但因为它是一个字符串,所以应该没问题。