2014-11-12 5 views
-1

Получив запрос от MySQL, у меня есть 2 массива: например: Sig: {a, b, c, d, e} T: {1,2 , 3,4,5}Создайте объект json с двумя массивами в PHP

Теперь, в PHP, я хочу объединить эти два массива и иметь такой массив, как: {(a, 1), (b, 2), (c, 3), (d , 4), (e, 5)}, затем покажите его как JSON, чтобы нарисовать диаграмму с помощью API визуализации Google.

Как я могу это сделать?

$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}]}]} 
+0

Ваш желаемый результат недействителен JSON. Это, по-видимому, объект, поскольку он находится в фигурных скобках ('' '' '' ''), но у него нет ключей. Он содержит пары чисел в круглых скобках, что недействительно ни для чего в JSON. Не могли бы вы опубликовать действительный результат цели? –

+0

@MarkReed, я редактировал мой вопрос. – nazanin

ответ

0

Редактировать

Ой, извините. Попробуйте array_merge и этот json_encode

+0

Результат такой: $ c = ['a', '1', 'c', '3'], но мне нужно, чтобы он был {(a, 1), (b, 2), (c, 3), (d, 4), (e, 5)} – nazanin

+0

спасибо, но это не то, о чем я думаю. Это похоже на {a, 1, b, 2, c, 3, d, 4} – nazanin

+0

. Это пятна моей диаграммы (x и Y) – nazanin

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)); 
?> 

Edit: Я забыл про JSON кодирования части. Вы можете узнать больше об этом here.

+0

спасибо, но как я могу получить массив меньших массивов. например: Я хочу иметь эти массивы (a, 1) (b, 2) ... – nazanin

+0

Я хочу нарисовать диаграмму этими пятнами как X и Y – nazanin

+0

@ nazanin, результат приведенного выше кода: '[[" а», 1], [ "б", 2], [ "С", 3], [ "д", 4], [ "е", 5]]'.Разве это не то, что вы хотите? – iLot

1

Ruby и Underscore относятся к операции с массивом как zip. PHP can zip arrays через array_map. Используйте json_encode для преобразования zipped массива в JSON.

function zipEncode($a, $b) { 
    return json_encode(array_map(null, $a, $b)); 
} 

Например zipEncode(['a', 'b'], [1, 2]) возвращает '[["a",1],["b",2]]'

Автономная функция зип принимать любое количество массивов может быть:

function zip() { 
    return call_user_func_array('array_map', array_merge([null], func_get_args())); 
} 
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 с нулевой функцией для создания массивов zip вместе таким образом. Вот пример (со строками для букв):

$letters = array('a','b','c','d','e'); 
$numbers = array(1,2,3,4,5); 
print(json_encode(array_map(null, $letters, $numbers))); 
Смежные вопросы