Подмена значений в JSON массиве из PHP-массива.
Ребят чувствую только тут мне смогут помочь.
Предыстория тут. А если кратко, тянем данные из 1с, и визуализируем с помощью amcharts.com. Данные вытянул, теперь осталось их подсунуть в отчет. Есть массив на PHP со значениями которые я хочу передать в отчет.
object(stdClass)#52 (1) { ["return"]=> object(stdClass)#62 (1) { ["strokaOtcheta"]=> array(4) { [0]=> object(stdClass)#88 (3) { ["doxod"]=> float(28184501.42) ["razxod"]=> float(26703754.53) ["podrazdelenie"]=> string(22) "Первое значение" } [1]=> object(stdClass)#89 (3) { ["doxod"]=> float(0) ["razxod"]=> float(6331.71) ["podrazdelenie"]=> string(10) "Второе значение" } [2]=> object(stdClass)#90 (3) { ["doxod"]=> float(28633237.75) ["razxod"]=> float(27051062.18) ["podrazdelenie"]=> string(22) "Третье значение" } [3]=> object(stdClass)#91 (3) { ["doxod"]=> float(23287488.7) ["razxod"]=> float(21948158.41) ["podrazdelenie"]=> string(16) "Четвертое значение" } } } } // Подключаем js-скрипты для отчетов
И есть сам отчет который оформлен в js.
<!-- amCharts javascript code -->
<script type="text/javascript">
AmCharts.makeChart("chartdiv",
{
"type": "serial",
"path": "http://www.amcharts.com/lib/3/",
"categoryField": "category",
"maxSelectedTime": -2,
"startDuration": 1,
"decimalSeparator": ",",
"categoryAxis": {
"gridPosition": "start",
"position": "top",
"title": "Аналитический отчет",
"titleColor": "#000000",
"titleFontSize": 15
},
"trendLines": [],
"graphs": [
{
"colorField": "color",
"fillAlphas": 1,
"id": "AmGraph-1",
"lineColorField": "color",
"title": "graph 1",
"type": "column",
"valueField": "column-1"
}
],
"guides": [],
"valueAxes": [
{
"id": "ValueAxis-1",
"maximum": 30000000,
"minimum": 1,
"axisThickness": 0,
"color": "#4B0082",
"fontSize": 13,
"gridThickness": 0,
"labelRotation": -3.6,
"minHorizontalGap": 73,
"showFirstLabel": false,
"showLastLabel": false,
"tickLength": 3,
"title": "Руб. ",
"titleBold": false,
"titleFontSize": 1
}
],
"allLabels": [],
"balloon": {},
"titles": [],
"dataProvider": [
{
"category": "Первое значение",
"column-1": "78787878",
"color": "#DCD36A"
},
{
"category": "Второе значение",
"column-1": "78787878",
"color": "#EE204D"
},
{
"category": "Третье значение",
"color": "#77DD77",
"column-1": "78787878"
}
]
}
);
</script>
Так как вся соль в автоматическом обновлении данных в отчете. Как бысделать так чтоб в скрипт отчета подставлялись данные из PHP массива с необходимыми значениями. Правильно ли я понимаю, что нужно исходные данные в JSON преобразовать? |
Конкретно нужно
["doxod"]=> float(23287488.7) подставить в "column-1": "78787878" |
Судя по докам делать надо так:
var data = [
{
"category": "Первое значение",
"column-1": "78787878",
"color": "#DCD36A"
},
{
"category": "Второе значение",
"column-1": "78787878",
"color": "#EE204D"
},
{
"category": "Третье значение",
"color": "#77DD77",
"column-1": "78787878"
}
];
var chart = AmCharts.makeChart("chartdiv",
{
"type": "serial",
"path": "http://www.amcharts.com/lib/3/",
"categoryField": "category",
"maxSelectedTime": -2,
"startDuration": 1,
"decimalSeparator": ",",
"categoryAxis": {
"gridPosition": "start",
"position": "top",
"title": "Аналитический отчет",
"titleColor": "#000000",
"titleFontSize": 15
},
"trendLines": [],
"graphs": [
{
"colorField": "color",
"fillAlphas": 1,
"id": "AmGraph-1",
"lineColorField": "color",
"title": "graph 1",
"type": "column",
"valueField": "column-1"
}
],
"guides": [],
"valueAxes": [
{
"id": "ValueAxis-1",
"maximum": 30000000,
"minimum": 1,
"axisThickness": 0,
"color": "#4B0082",
"fontSize": 13,
"gridThickness": 0,
"labelRotation": -3.6,
"minHorizontalGap": 73,
"showFirstLabel": false,
"showLastLabel": false,
"tickLength": 3,
"title": "Руб. ",
"titleBold": false,
"titleFontSize": 1
}
],
"allLabels": [],
"balloon": {},
"titles": [],
"dataProvider": data
}
);
//после получения новых жанных из php делать следующее:
data[0]['column-1'] = новые_цифры;
chart.validateData();
|
Возьмите массив из JS, потом преобразуйте помощью json_decode, далее работаете как с обычными массивами в PHP, после замены, преобразуете опять в JSON для JS
|
Цитата:
|
Массив значений я получаю,
$result = $client->PoschitatDoxod($params)->return->strokaOtcheta;
foreach ( $result as $key)
$json_data[] = array("column-1"=>"$key->doxod","color"=>"#DCD36A","category"=>"$key->podrazdelenie");
$table_json['data'] = $json_data;
//echo json_encode($table_json, JSON_UNESCAPED_UNICODE);
Как теперь сделать так чтоб он был доступен в var data?? |
Пробую так, но выскакивает ошибка
$result = $client->PoschitatDoxod($params)->return->strokaOtcheta;
foreach ( $result as $key)
$json_data[] = array("column-1"=>"$key->doxod","color"=>"#DCD36A","category"=>"$key->podrazdelenie");
$table_json['data'] = $json_data;
echo json_encode($json_data, JSON_UNESCAPED_UNICODE);
<script language="javascript">
var data=<?php echo json_encode($json_data, JSON_UNESCAPED_UNICODE); ?>;
</script>
?>
Цитата:
|
Упс... Ссори.
Надо было скрипт вынести за тег <?php ?>. Всем спасибо большое. Теперь осталось решить следующее. У меня в массив в значение color выводятся предопределенные значения которые я указал. Соответственно и диаграмма выводит три колонки одинакового цвета, что не совсем эстетично. Как я могу в color передавать различные предопределенные значения?? |
Цитата:
Еще раз глянул, в общем там бред голимый. Цвет надо генерить в зависимости от номера колонки. У вас номеров нет, все валится сплошняком в один массив, причем в другой все валится еще раз и каждый раз еще больше к тому что уже было, а потом оно зачем-то вываливается в буфер... галиматья, короче. Из бредокода вроде ясно что надо отгрузить $result и париться уже в браузере. Там же и цвет нагенерить, какая разница-то, если по нему нет данных в результе. json_encode() и объекты захавает, не волнуйтесь. ЗЫ Ну да, а потом просто obj.dataProvider = JSON.parse(this.responseText) или типа того. |
| Часовой пояс GMT +3, время: 06:26. |