2014-02-13 3 views
0

Я немного искал советы и не смог выяснить, что я пытаюсь сделать.json_encode с многомерным массивом

Я построил php-функцию, которая берет CSV-файл и выгружает данные в многомерный массив (я на 99% уверен, что это правильно, по крайней мере). Мне нужно затем взять данные из массива и поместить его в линейный граф. Вот мой PHP код, который извлекает данные из CSV (и добавляет значение в конце, который является расчетом 2 других значений в массиве):

<?php 

function readCSV($csvFile) { 
    $file_handle=fopen($csvFile,'r'); 
    while (!feof($file_handle)) { 
     $line_of_text[]=fgetcsv($file_handle,1024); 
    } 
    fclose($file_handle); 
    return $line_of_text; 
} 

// Set path to CSV file 
$csvFile='./example.csv'; 

$csv=readCSV($csvFile); 
array_push($csv[0], "Percentage"); 
$headers = array_shift($csv); 
$i=0; 
foreach ($csv as $record) { 
    $Perc = $record[2]/$record[3]; 
    $Perc = $Perc * 100; 
    $Perc = round ($Perc, 2); 
    array_push($csv[$i], $Perc); 
    $j=0; 
    $i++; 
} 
foreach ($csv as $key => $row) { 
    $year[$key] = $row[0]; 
} 
array_multisort($year, SORT_ASC, $csv); 

//print_r($csv); 
echo json_encode($csv); 

?> 

Это эхо дает мне массив с следующие результаты:

[["2008","41","412","525","125.2",78.48],["2009","33","393","571","99.9",68.83],["2010","33","450","679","91.9",66.27],["2012","37","400","583","105.8",68.61],["2013","55","450","659","115.1",68.29]]

Первый ключ - год. На моем графике мне нужно составить диаграмму в зависимости от года по оси x, и мне нужно составить диаграмму 1, 5 и 6 (все в зависимости от года). Я не мог понять, как это сделать.

Формат для графа-то вроде этого:

var d1 = [[0, 3], [4, 8], [8, 5], [12, 13]]; 

var d1 = [[2009, 33], [2010, 33], [2012, 37], [2013, 55]]; 
var d2 = [[2009, 99.9], [2010, 91.9], [2012, 105.8], [2013, 115.1]]; 
var d3 = [[2009, 68.83], [2010, 66.27], [2012, 68.61], [2013, 68.29]]; 

, где первое значение в каждом наборе является ось х, 2-е значение по оси у.

любая помощь была бы очень оценена. Благодаря!

+0

Я не совсем еще понимание того, что вы просите. Как массив 'var d1 = []' относится к данным вашего JSON? Это просто шаблон для формата, который ожидает ваш график? Как год относится к этому шаблону? Вы говорите, что вам нужно нарисовать год на X, так как это выглядит как «var d1 = [[2008, 3], [2009, 8] ...]'? –

+0

var d1 - это шаблон для панели инструментов, которую я использую. Если на графике имеется несколько строк, это будут var d2, var d3 и т. Д. Эта часть находится в javascript. Поэтому (теоретически) для получения моего php-массива, мне нужно будет сделать что-то вроде: var d1 = ; Я ДУМАЮ? Извините, совершенно новый для всего этого. – jms2k

+0

Можете ли вы опубликовать пример того, как должен выглядеть массив 'd1' в JavaScript при заполнении фактическими значениями вашего JSON? –

ответ

0

Перед кодированием JSON вы уже успешно отсортировали свой массив $year с помощью array_multisort(). Следующее, что нужно сделать, - это повторить его три раза, по одному для трех выходных переменных и создать 2D-массив для каждого из них. После этого вы можете использовать PHP для выписывания JavaScript и вызвать json_encode() на отдельных массивах.

// You already sorted $year how you need it 
array_multisort($year, SORT_ASC, $csv); 

// This will store your final output 
$mapped_values = array(); 

// You want the keys 1,4,5 
foreach (array(1,4,5) as $key) { 
    $temp = array(); 
    // Loop over each year array and make a sub-array of year,key 
    // 2008, 2008, 2010.... 
    foreach ($csv as $y) { 
    // intval() & floatval() prevent the output as strings to JSON... 
    $temp[] = array(intval($y[0]), floatval($y[$key]); 
    } 
    // Append the structure to the outer result 
    // Each of these corresponds to one of the keys 1,4,5... 
    $mapped_values[] = $temp; 
} 

// Write it as output: 
foreach ($mapped_values as $varnum => $js_var) { 
    // To get the d1, d2, d3 
    $num = $varnum + 1; 
    // Write a var dN = JSON... 
    // json_encode() will produce the appropriate output 
    echo "var d{$num} = " . json_encode($js_var) . ";\n"; 
} 

Это производит следующий вывод:

var d1 = [[2008,41],[2009,33],[2010,33],[2012,37],[2013,55]]; 
var d2 = [[2008,125.2],[2009,99.9],[2010,91.9],[2012,105.8],[2013,115.1]]; 
var d3 = [[2008,78.48],[2009,68.83],[2010,66.27],[2012,68.61],[2013,68.29]]; 
Смежные вопросы