2013-04-20 2 views
0

Я пытаюсь настроить некоторые простые диаграммы Amcharts для веб-страницы интрасети компании. За последние две недели я создал HTML/JS и создал приятную графику с использованием Amcharts (данные жестко закодированы в HTML для демонстрационных целей). Я также установил XAMPP и создал базу данных MySQL, заполненную таблицами и некоторыми данными, которые импортируются из файлов csv.Заполнение массива PHP из MySQL для использования Amcharts

Пока все работает нормально - я могу отображать красивую графику, и я могу собирать данные для подачи данных на графики. Тем не менее, я подошел к этой проблеме с двух концов (получение исходных данных в базу данных и представление данных в графике на веб-странице). Теперь мне нужно присоединиться к этим двум концам, поэтому я могу подавать Amcharts с данными из MySQL.

Я знаю, что мне нужно использовать PHP для получения данных из MySQL и поместить это в массив, который может использоваться Amcharts, но мои знания PHP очень простые, и я борюсь с кодом.

У меня есть PHP-код, который успешно соединяется с MySQL и извлекает данные для отображения в браузере - это работает. Я просто не знаю, как получить эти данные в многомерном массиве в формате, который требуется Amcharts для построения графика.

Было бы здорово, если бы вы, ребята, могли мне помочь и заполнить недостающие части. У меня есть псевдо-код для логики создания массива в качестве основы для «реального» PHP-кода.

Это псевдокод для заполнения массива:

; кодировка = UTF-8' , '', '', массив (PDO :: ATTR_EMULATE_PREPARES => ложно, PDO :: ATTR_ERRMODE = > PDO :: ERRMODE_EXCEPTION));

$stmt = $db->query("SELECT * FROM <mytable> WHERE <mycondition>"); 

$prevweek = "9999"; 
$headrowdone = 0; 

while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
    if ($prevweek < $row['WeekNumber']) { 
     // New week so write out Category X Label ('Week') with the week number of the following data rows 
     chartData.push($DataRow); 
     $headrowdone = 0; 
    } 
    if (!$headrowdone) { 
     $DataRow = "Week: "+$row['WeekNumber']; 
     $headrowdone = 1; 
    } 
    // Write out the X-Axis Category value and the Y-Axis value 
    $DataRow = $DataRow+$row['XAxisCategory']+": "+$row['YAxisCategory']; 
    $prevweek = $row['WeekNumber']; 
} 
chartData.push($DataRow); ?> 

В таблице SQL выглядит следующим образом:

CREATE TABLE (НомерНедели VARCHAR (4), XAxisCategory VARCHAR (50), YAxisValue целое число);

и имеет следующие данные: '1301', 'A', 10 '1301', 'B', 20 '1301', 'C', 24 '1302', 'A', 11 '1302', «B», 22 '1302', 'C', 27 '1303', 'A', 14 '1303', 'B', 23 '1303', 'C', 28 ... и т.д.

массив данных для amcharts должен выглядеть следующим образом:

вар chartData = [{недели: "1301", А: 10, Б: 20, с: 24 }, { недели: "1302",А: 11, Б: 22, С: 27 }, { Неделя: "1303", А: 14, Б: 23, С: 28 .... и т.д. }];

ответ

2
// This is spoofing your fetch via pdo 
$rows [] = array('WeekNumber'=>1301, 'A'=>10); 
$rows [] = array('WeekNumber'=>1301, 'B'=>20); 
$rows [] = array('WeekNumber'=>1301, 'C'=>25); 

$rows [] = array('WeekNumber'=>1302, 'A'=>12); 
$rows [] = array('WeekNumber'=>1302, 'B'=>22); 
$rows [] = array('WeekNumber'=>1302, 'C'=>27); 
//var_dump($rows); 

// set up some vars 
$lastweek = ''; 
$ctr = 0; 
$data = array(); 


// loop thru the vars, build another array 
foreach($rows as $row){ 

if($row['WeekNumber'] !== $lastweek){ 
    $ctr++; 
    $data[$ctr] = array('Week'=>$row['WeekNumber']); 
    $lastweek= $row['WeekNumber']; 
} 
// this could be nicer, but for now will do 
if(isset($row['A'])) $data[$ctr]['A'] = $row['A']; 
if(isset($row['B'])) $data[$ctr]['B'] = $row['B']; 
if(isset($row['C'])) $data[$ctr]['C'] = $row['C']; 

} 

var_dump($data); 

Затем используйте json_encode(), чтобы попасть в нужный формат.

Этот ответ немного клочковый, но по крайней мере уходит от построения строк, чтобы сделать json.

+0

'json_encode' - функция, которую вы хотели сказать;) –

+1

Отредактированный ответ, хорошее место, thx. – Cups

 Смежные вопросы

  • Нет связанных вопросов^_^