2014-01-10 8 views
0

У меня есть цикл foreach, который извлекает значения из таблицы mysql. После извлечения значений их помещают внутри массива и затем, наконец, преобразуют в объект json. Формат json-объекта должен быть специфичным для правильной работы с сторонним api, который я использую в настоящее время. Результаты, которые я получаю, в настоящее время размещают все значения внутри объекта json. Моя цель - сопоставить значения на отдельных объектах json {},{},etc. Кроме того, как добавить ярлыки внутри объекта для значений, которые были выбраны?Форматирование значений внутри объекта json - json_encode()

$level_query = $db_con->prepare("SELECT a.type, COUNT(1) AS cnt 
FROM academy a 
GROUP BY a.type"); 
$level_query->execute(); 
$data = $level_query->fetchAll(); 
$level_data = array(); 
foreach ($data as $row) { 
    $type = $row["type"]; 
    $level_data[$type] = $row["cnt"]; 

} // foreach ($data as $row) { 
echo json_encode($level_data); 

Текущий формат:

{" Expert":"12","Intermediate":"512","Beginner":”1002”} 

Correct/Желаемый формат Формат:

{ level: "Expert", count: 12 }, 
{ level: "Intermediate", count: 512 }, 
{ level: "Beginner", count: 1002 } 

ответ

2

Попробуйте это:

$output = array(); 
foreach ($data as $row) { 
    array_push($output, array('level'=>$row["type"], 'count'=>$row["cnt"])); 
} 
echo json_encode($output); 

Желаемый формат выглядит как массив объектов, каждый из которых содержит level и count.

данных, как это:

$data = array(
    array('type'=>'a','cnt'=>1), 
    array('type'=>'b','cnt'=>2), 
    array('type'=>'c','cnt'=>3), 
    array('type'=>'d','cnt'=>4), 
    array('type'=>'e','cnt'=>5) 
); 

выходит так:

[{"level":"a","count":1},{"level":"b","count":2},{"level":"c","count":3},{"level":"d","count":4},{"level":"e","count":5}] 
+0

Великий, это работает. Благодарю. Я не знал, как использовать массив. Теперь мне нужно подождать 6 минут, прежде чем я смогу принять. – techAddict82

+0

Добро пожаловать! Заранее спасибо ;) – Cerbrus

Смежные вопросы