用PHP中的两个数组创建一个json对象

时间:2014-11-12 00:38:22

标签: php arrays json

通过从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.497876‌​8e-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.497876‌8e-5},{"v":4.108994e-5}]},{"c":[{"v":3.7465044e-5},{"v":6.16302e-5}]}]}

4 个答案:

答案 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)

RubyUnderscore将该数组操作称为 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_mergejson_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)));