Вход

Просмотр полной версии : как сформировать свойство функции


imedia
12.06.2015, 23:32
Есть свойство функции

data: [
{ year: '2008', value: 20 },
{ year: '2009', value: 10 },
{ year: '2010', value: 5 },
{ year: '2011', value: 5 },
{ year: '2012', value: 20 } */
],

как его записать в таком виде из следующего массива array? Чтобы получать это свойство динамически?

'0' :
'year' => "4"
'value' => "100"
'1' :
'year' => "100"
'value' => "200"
'2' :
'year' => "8"
'value' => "100"
'3' :
'year' => "19"
'value' => "300"

Sigizmund2012
13.06.2015, 09:05
imedia,
Я в php не силён, но думаю массив нужно пробегать foreach, который будет формировать новый ассоциативный массив и для значений year запускать функцию, которая будет их в года преобразовывать. Только входящий массив странный какой-то, вот это 'year' => "100" в какой год должно преобразоваться?
Далее echo json_encode($arr); На клиенте JSON.parse(str) и присобачиваете полученный массив объектов как свойство своей функции.

imedia
13.06.2015, 10:06
это javascript, а вопрос именно в том как присобачить
new Morris.Line({
// ID of the element in which to draw the chart.
element: 'myfirstchart',
// Chart data records -- each entry in this array corresponds to a point on
// the chart.
data: [
{ year: '2008', value: 20 },
{ year: '2009', value: 10 },
{ year: '2010', value: 5 },
{ year: '2011', value: 5 },
{ year: '2012', value: 20 } */
],
// The name of the data record attribute that contains x-values.
xkey: 'year',
// A list of names of data record attributes that contain y-values.
ykeys: ['value'],
// Labels for the ykeys -- will be displayed when you hover over the
// chart.
labels: ['Value']
});

года странные в массиве но это не имеет значение, просто числа там проходят

Sigizmund2012
13.06.2015, 11:01
imedia,
data это не свойство функции, а свойство объекта, который передаётся конструктору Morris.Line в качестве аргумента. Изменить этот объект можно до передачи его в функцию. Как-то так:

var options = {
// ID of the element in which to draw the chart.
element: 'myfirstchart',
// Chart data records -- each entry in this array corresponds to a point on
// the chart.
data: [
{ year: '2008', value: 20 },
{ year: '2009', value: 10 },
{ year: '2010', value: 5 },
{ year: '2011', value: 5 },
{ year: '2012', value: 20 }
],
// The name of the data record attribute that contains x-values.
xkey: 'year',
// A list of names of data record attributes that contain y-values.
ykeys: ['value'],
// Labels for the ykeys -- will be displayed when you hover over the
// chart.
labels: ['Value']
};

options.data = [
{ year: '2013', value: 25 },
{ year: '2009', value: 10 },
{ year: '3010', value: 50 },
{ year: '2051', value: 4 },
{ year: '2012', value: 20 }
];

new Morris.Line( options );

imedia
13.06.2015, 11:45
да но у меня есть массив array

'0' :
'year' => "4"
'value' => "100"
'1' :
'year' => "100"
'value' => "200"
'2' :
'year' => "8"
'value' => "100"
'3' :
'year' => "19"
'value' => "300"

как именно его прировнять к этому options.data формату, и к тому же ваш вариант не переопределяет массив значений

Sigizmund2012
13.06.2015, 12:34
и к тому же ваш вариант не переопределяет массив значений
А это что тогда?:

options.data = [
{ year: '2013', value: 25 },
{ year: '2009', value: 10 },
{ year: '3010', value: 50 },
{ year: '2051', value: 4 },
{ year: '2012', value: 20 }
];

как именно его прировнять к этому options.data формату
Посылаете ajax запрос, на сервере через json_encode($arr) превращаете ваш массив в строку и отсылаете клиенту, в браузере через JSON.parse(request.responseText) получаете массив и присваиваете options.data

imedia
13.06.2015, 13:05
массив уже в яваскрипте как его присвоить option.data ? покажите на примере он же с основными ключами, и у вас все таки option.data не переопределяет, сейчас выложу сам фреймворк по построению графиков

imedia
13.06.2015, 13:06
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.css">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.min.js"></script>

<div id="myfirstchart" style="height: 250px;"></div>
<script>
new Morris.Line({
// ID of the element in which to draw the chart.
element: 'myfirstchart',
// Chart data records -- each entry in this array corresponds to a point on
// the chart.
data: [
{ year: '2008', value: 20 },
{ year: '2009', value: 10 },
{ year: '2010', value: 5 },
{ year: '2011', value: 5 },
{ year: '2012', value: 20 }
],
// The name of the data record attribute that contains x-values.
xkey: 'year',
// A list of names of data record attributes that contain y-values.
ykeys: ['value'],
// Labels for the ykeys -- will be displayed when you hover over the
// chart.
labels: ['Value']
});
options.data = [
{ year: '2013', value: 25 },
{ year: '2009', value: 10 },
{ year: '3010', value: 50 },
{ year: '2051', value: 4 },
{ year: '2012', value: 20 }
];

new Morris.Line( options );
</script>

Видите нет переопределения

Sigizmund2012
13.06.2015, 13:26
imedia,
Вот так надо:

<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.css">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.min.js"></script>

<div id="myfirstchart" style="height: 250px;"></div>


<script>

var options = {
// ID of the element in which to draw the chart.
element: 'myfirstchart',
// Chart data records -- each entry in this array corresponds to a point on
// the chart.
data: [
{ year: '2008', value: 20 },
{ year: '2009', value: 10 },
{ year: '2010', value: 5 },
{ year: '2011', value: 5 },
{ year: '2012', value: 20 }
],
// The name of the data record attribute that contains x-values.
xkey: 'year',
// A list of names of data record attributes that contain y-values.
ykeys: ['value'],
// Labels for the ykeys -- will be displayed when you hover over the
// chart.
labels: ['Value']
};

options.data = [
{ year: '2013', value: 25 },
{ year: '2009', value: 10 },
{ year: '3010', value: 50 },
{ year: '2051', value: 4 },
{ year: '2012', value: 20 }
];

new Morris.Line( options );


</script>

Sigizmund2012
13.06.2015, 13:29
imedia,

'0' :
'year' => "4"
'value' => "100"
'1' :
'year' => "100"
'value' => "200"
'2' :
'year' => "8"
'value' => "100"
'3' :
'year' => "19"
'value' => "300"


Такая форма массива характерна только для php, js ошибку выдаст, он не знает что такое =>.

imedia
13.06.2015, 14:05
Он вот так сформирован, как же мне сформировать массив необходимый для размещения в объекте data? Помогите друзья
var arran = '<? echo $json;?>';
//получаем ассив объектов из строки
var arran_arr=eval(arran).map(function(ob){return eval(ob)})
$.each( arran_arr, function( key, value ) {
$.each( value, function( key2, value2 ) {
if(key2=='xx'){
x=value2
}
if(key2=='yy'){
y=value2
}
arr[key] = {year:x,value:y};
})
array.push(arr[key]);
});

Sigizmund2012
13.06.2015, 14:30
imedia,
А если так?:
var arran = JSON.parse(<? echo $json; ?>);
По идее должны получить готовый массив объектов, который не надо обрабатывать.