PHP формат массива для json_encode

#php #arrays

#php #массивы

Вопрос:

я создаю массив с помощью этого php-запроса..

PHP

 $query = mssql_query("  SELECT count(startdate) as incept,  month(startdate) as month, year(startdate) as year
                        FROM tblUser
                        WHERE startdate >=  convert(varchar(20),'$val1',121) AND startdate <= convert(varchar(20),'$val2',121) 
                        GROUP BY  month(startdate), year(startdate) 
                        ORDER BY  year(startdate) ASC, month(startdate) ASC ");

while ($data = mssql_fetch_array($query)) {
    $name = $data['year'];
    $data = array($data['month'],$data['incept']);
    $case[$data['year']] = array('name' => $name, 'data' => $data);
}
  

Я хочу сохранить приведенный выше запрос в следующей структуре и передать его в json.

 $case = array(
'2011' => array(
    'name' => 2011,
    'data' => array(
        array('0', 166),
        array('1', 132),
        ..
        array('5', 160)
    )
),
'2012' => array(
    'name' => 2012,
    'data' => array(
        array('0', 142),
        ...
        array('5', 163)
    )
),
'2013' => array(
    'name' => 2013,
    'data' => array(
        array('0', 156),
        ...
        array('6', 198)
    )
)
  

)

Есть ли способ, которым я могу сгенерировать в этом формате? Спасибо

Комментарии:

1. Пожалуйста, опубликуйте фактический результат.

2. Вы должны предоставить образец данных.

Ответ №1:

Внутри цикла:

 if (!isset($case[$data['year']])) {
    $case[$data['year']] = array(
        'name' => $data['year'],
        'data' => array()
    );
}

$case[$data['year']]['data'][] = array(
    $data['month'],
    $data['incept']
);
  

Ответ №2:

если перезаписать массив $data во второй строке вашего while, вы можете сделать :

 while ($data = mssql_fetch_array($query)) {
    $name = $data['year'];
    $data = array($data['month'],$data['incept']);
    if ( ! isset($case[$name]))
        $case[$name] = array('name' => $name, 'data' => $data);
    else
        $case[$name]['data'][] = $data;
}