Подмена значений в 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, время: 17:46. |