PHP: как передать несколько переменных в массив? - PullRequest
1 голос
/ 10 декабря 2011

В API диаграммы Google данные для диаграммы задаются этой строкой:

data.addRows([
  ['2004', 1000, 400],
  ['2005', 1170, 460],
  ['2006',  860, 580],
  ['2007', 1030, 540]
]);

Я хочу иметь возможность установить эти данные из данных в моей базе данных. Ниже изображение моей базы данных: enter image description here

Я хочу взять все значения salePrice и unitPrice и отобразить значения на линейном графике, которые соответствуют периоду, в котором они были созданы.

Вот мой код:

<?php 

include("getteam.php");


    $saleprice = mysql_query("

    SELECT `outputValue` FROM `output` WHERE `teamID` = '$teamID' && `outputType` = 'salePrice'

    ")or die($saleprice."<br/><br/>".mysql_error());

    // set ID's = to a variable and now get Outputs for each variable(teamID)
    $salepriceNumR  = mysql_num_rows($saleprice);


            $sPrice = array();

            $i="0";


            while ($i<$salepriceNumR && $row = mysql_fetch_assoc($saleprice))
            {

            $sPrice[$i] = $row['outputValue'];
            $i++;

            }




    $unitprice = mysql_query("

    SELECT `outputValue` FROM `output` WHERE `teamID` = '$teamID' && `outputType` = 'unitPrice'

    ")or die($unitprice."<br/><br/>".mysql_error());

    // set ID's = to a variable and now get Outputs for each variable(teamID)
    $unitpriceNumR  = mysql_num_rows($unitprice);


            $uPrice = array();

            $i="0";


            while ($i<$unitpriceNumR && $row = mysql_fetch_assoc($unitprice))
            {

            $uPrice[$i] = $row['outputValue'];
            $i++;


            }



$chartrow = array();

for ($i = 0; $i < $unitpriceNumR; $i++ )
{

$chartrow[$i] = "['".$i."',".$sPrice[$i].", ".$uPrice[$i]."]";

}

switch ($currentStage) {

case "0":
case "1":
    $value = $chartrow[0]; 

    break;

case "2":
    $value = $chartrow[0].",".$chartrow[1];

    break;

case "3":
    $value = $chartrow[0].",".$chartrow[1].",".$chartrow[2];

    break;


default:
    $value = $chartrow[0]; 
    // You should have some default value, seriously!!!
}               




?>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawChart);
function drawChart() {
var data = new google.visualization.DataTable();
data.addColumn('string', 'Year');
data.addColumn('number', 'Sales');
data.addColumn('number', 'Expenses');
data.addRows(JSON.parse( [<?php echo json_encode($value); ?>] )); 

var options = {
  width: 400, height: 240,
  title: 'Company Performance'
};

var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
chart.draw(data, options);
}
</script>

<div id="chart_div"></div>

Проблема в том, как я задаю $value это строка, поэтому данные выводятся неправильно. Есть ли способ, которым я могу установить $value, чтобы я мог использовать его по назначению?

Когда отображается $value ($currentStage является значением 3), это выводится: ['0', 0, 0], ['1', 65, 35], ['2', 88, 35]

Однако, когда я просматриваю источник, я получаю:

 data.addRows(JSON.parse( ["['0',0, 0],['1',65, 35],['2',88, 35]"] )); 

Мне нужно избавиться от "".

1 Ответ

2 голосов
/ 10 декабря 2011

Вы должны проанализировать вашу строку JSON:

data.addRows(JSON.parse( <?php echo json_encode($value); ?> ));  

Если я не ошибаюсь, это должно решить вашу проблему.

Редактировать На самом деле я не уверен, что понимаю, почему вы устанавливаете переменную $value в строку; весь смысл json_encode в том, что вы можете напрямую кодировать объекты или массивы.

Редактировать 2 : Вот как я это вижу, но мой php более чем ржавый.

<?php

$chartrow = array(); 

for ($i = 0; $i < $unitpriceNumR; $i++ ) 
{  
    $chartrow[$i] = array( (string)$i, (int)$sPrice[$i], (int)$uPrice[$i] );
} 

switch ($currentStage) { 
    case "0": 
    case "1": 
        $value = $chartrow[0];  
    break; 

    case "2": 
        $value = array($chartrow[0], $chartrow[1]);
        break; 

    case "3": 
        $value = array($chartrow[0], $chartrow[1], $chartrow[2]); 
    break;
    default: 
        $value = $chartrow[0];  
}                

Редактировать 3 Я редактировал фрагмент js, я не знаю, почему оставил скобки вокруг тегов php.

Редактировать 4 Редактировать код php до рабочей версии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...