通过从MySQL获取查询,我有2个这样的数组: 例如: SIG:{A,B,C,d,E} T:{1,2,3,4,5}
现在,在PHP中,我想合并这两个数组,并且有一个数组,如:{(a,1),(b,2),(c,3),(d,4),(e,5然后,将其显示为JSON,以便通过Google可视化API绘制图表。
我该怎么做?
$data = array();
$data['cols'] = array(
array('id' => 'Sig','label' => 'Sig', 'type' => 'string'),
array('id' => 'T','label' => 'Time', 'type' => 'string')
);
$rows = array();
while($r = mysql_fetch_assoc($result)) {
$temp = array();
//changing the string (data in MySQL) into array of float for column Sig
$csvdata = $r['Sig'];
$a = explode(',', $csvdata);
for($i=0;$i<sizeof($a);$i++)
{
$floa[]=floatval($a[$i]);
}
//changing the string (data in MySQL) into array of float for column T
$csvdata = $r['T'];
$s = explode(',', $csvdata);
for($i=0;$i<sizeof($s);$i++)
{
$flos[]=floatval($s[$i]);
}
function toArr(){
return func_get_args();
}
$c = array_map ('toArr',$floa,$flos);
$temp[] = array('v' => $c);
$rows[]= array('c' => $temp);
}
$data['rows'] = $rows;
echo json_encode($data);
这是输出:
{"cols":[{"id":"Sig","label":"Sig","type":"string"},{"id":"T","label":"Time","type":"string"}],"rows":[{"c":[{"v":[[0,0],[1.2490004e-5,2.0545915e-5],[2.4978768e-5,4.108994e-5],[3.7465044e-5,6.16302e-5]]}]}]}
但我需要它像这样:
{"cols":[{"id":"Sig","label":"Sig","type":"string"},{"id":"T","label":"Time","type":"string"}],"rows":[{"c":[{"v":0},{"v":0}]},{"c":[{"v":1.2490004e-5},{"v":2.0545915e-5}]},{"c":[{"v":2.4978768e-5},{"v":4.108994e-5}]},{"c":[{"v":3.7465044e-5},{"v":6.16302e-5}]}]}
答案 0 :(得分:1)
这应该可以解决任意数量的数组:
<?php
function toArr(){
return func_get_args();
}
$a = array ('a','b','c','d','e');
$b = array(1,2,3,4,5);
$c = array_map ('toArr',$a,$b);
var_dump(json_encode($c));
?>
编辑: 我忘记了json编码部分。您可以阅读更多相关信息here。
答案 1 :(得分:1)
Ruby和Underscore将该数组操作称为 zip 。 PHP can zip arrays来自array_map
。使用json_encode
将压缩数组转换为JSON。
function zipEncode($a, $b) {
return json_encode(array_map(null, $a, $b));
}
例如zipEncode(['a', 'b'], [1, 2])
返回'[["a",1],["b",2]]'
接受任意数量阵列的独立zip函数可以是:
function zip() {
return call_user_func_array('array_map', array_merge([null], func_get_args()));
}
答案 2 :(得分:0)
修改强>
哦,抱歉。试试这个array_merge和json_encode
答案 3 :(得分:0)
如果您想要{(a,1),(b,2),(c,3),(d,4),(e,5)}
,我认为,既然您要求使用JSON,那么您真正想要的是:[[a,1],[b,2],[c,3],[d,4],[e,5]]
,其中a
.. e
是希望有数字。
您可以使用array_map
和null函数以这种方式将数组压缩在一起。这是一个例子(带字母的字符串):
$letters = array('a','b','c','d','e');
$numbers = array(1,2,3,4,5);
print(json_encode(array_map(null, $letters, $numbers)));