2012-12-20 14 views
7

Wdrażam Highcharts w mojej aplikacji. Potrzebuje danych w określonym formacie.DB Array do oczekiwanego formatu javascript

Dane w moim tabeli jest następująca

enter image description here

javascript danych musi się poniżej formacie

enter image description here

Kiedy var_dump mój x_axis tablicy i y_axis tablicę, mam poniżej wynik:

enter image description here

Z jakich funkcji php należy użyć do sformatowania elementów tablicy i przekazania do tego skryptu JavaScript w tym formacie?

data:[ 
    [<? echo PHP_some_function(" ' ", x_axis) ?>, <? echo (y_axis) ?>] //quotes for x, no quotes for y value 
] //Moreover it should run for all the values in x_axis and y_axis 

Potrzebuję trochę logiki tutaj ..

Mój ostatni wykres wyglądałby

enter image description here

+0

prawdopodobnie nie chcesz używać tych zmiennych. Prawdopodobnie chcesz wyodrębnić swoje dane jako bardziej kompletne zestawy rekordów, każdy rekord zawierający x_axis, y_axis i ewentualnie si_no, uporządkowany przez y_axis malejąco. To powinno być względnie proste. –

+0

Po drugiej stronie, jest to jedno z dobrze zadawanych pytań, które ostatnio widziałem! – Pateman

+0

To wygląda trochę jak zadanie domowe. Nawet wartości są takie same. http://stackoverflow.com/questions/13954081/highcharts-pie-chart-x-axies-values-are-not-displayed-while-trying-to-get-data-f – wergeld

Odpowiedz

2

Problem polega na zapytanie.

Powinny być następujące.

SELECT x_axis, y_axis FROM yourTableName; 

ten sposób dostaniesz dokładnie to format, który Highcharts potrzeb. Musisz tylko wstawić go do tablicy.

1

[<? echo "'". json_encode($x_axis). "', " . json_encode($y_axis) ?>] 

Demo: http://codepad.org/G5JAtXWu

Nix, że byłem zdezorientowany.

Co chcesz zrobić to:

foreach($x_axis as $key=>$x) { 
    echo "['" . $x . "', " . $y_axis[$key] . "]"; 
} 

Demo: http://codepad.org/SKNk1VaX

Aby zawinąć to wszystko:

$d = array(); 
foreach($x_axis as $key=>$x) { 
    $d[] = "['" . $x . "', " . $y_axis[$key] . "]"; 
} 
echo json_encode($d); 

Demo: http://codepad.org/KhofwXCi

+0

To nie bierze pod uwagę o które prosiliśmy. –

+0

@ScottSauyet Nie widzę żadnego sortowania. – Neal

+0

Sprawdź kolejność żądanych danych w konfiguracji wykresu. Wyraźnie malejące wartości. Nie mam pojęcia, czy to naprawdę ważne. –

1

Zakładając:

$x_axis = array('Safari', 'Opera', 'Firefox', 'IE', 'Chrome', 'Others'); 
$y_axis = array(10, 6, 40.5, 20, 10.6, 0.5); 

To powinno działać:

$data = array(); 
$length = count($x_axis); 
for ($i = 0; $i < $length; $i++) { 
    $data[] = array($x_axis[i], $y_axis[i]); 
} 
+0

Nie uwzględnia to żądanego sortowania. –

+0

@ScottSauyet: OP nie zażądał posortowania danych i nie byłbym zaskoczony, gdyby biblioteka tego wykresu zajęła się tym – Cerbrus

+0

, ale przyjrzyj się wymaganemu formatowi danych, który zawiera dane w posortowanej kolejności; nie pasuje do kolejności wprowadzania. –

0

prawdopodobnie tablica połączyć i niż json kodować i zastąpić? tylko w przypadku różnorodności;)

<?php 

$x_axis = array(
'Safari', 'Opera', 'fireFox' 
); 

$y_axis = array(
10, 30.4, 50 
); 

$keyFilled = array_combine($x_axis, $y_axis); 

arsort($keyFilled); 

$jsonData = json_encode($keyFilled); 

$jsonDataReplaced = str_replace(array(',', '{', '}', ':'), array('],[', '[', ']', ','), $jsonData); 
echo '<pre>'; 
var_dump('['.$jsonDataReplaced.']'); 

?> 

wyjście jest:

string(45) "[["fireFox",50],["Opera",30.4],["Safari",10]]" 

http://phpfiddle.org/main/code/jq4-cgb

+0

Nie uwzględnia to rodzaju żądanego. –

+0

@ScottSauyet, nie jestem pewien, czy zażądano, ale jest łatwa do naprawienia, zaktualizowana – dmi3y