2012-03-02 1 views
0

Я очень новичок в PHP, и я даже не знаю JSON. Кроме того, я не мог понять, как выразить это в вопросе. Мой вопрос:Как получить разные столбцы с JSON (PHP)?

Мне нужно сделать данные JSON с PHP с данными из базы данных. Итак, каков мой ожидаемый результат;

{ "canFireAPICalls": true, "ads": { "servers": [ { "type": "OpenX", "apiAddress": "http://openx.openvideoads.org/openx/www/delivery/fc.php", } ], "schedule": [ { "zone": "5", "position": "pre-roll" }, { "zone": "33", "width": 450, "height": 50, "startTime": "00:00:05", "duration": "15" } ], } } 

Что я написал в PHP:

while ($doZones->fetch() && $row = $doZones->toArray()) { 
    $row_array['zone'] = $row['zoneid']; 
    $row_array['position'] = $row['delivery']; 

    if($row['delivery'] == 0 || $row['delivery'] == 1 || $row['delivery'] == 4){ 
     $row_array['width'] = $row['width']; 
     $row_array['height'] = $row['height']; 
    } 


    array_push($return_arr,$row_array); 
} 

$resultJSON .=json_encode($return_arr); 

И мой выход

{ "canFireAPICalls": true, "ads": { "servers": [ { "type": "OpenX", "apiAddress": "http://openx.openvideoads.org/openx/www/delivery/fc.php", } ], "schedule":[{"zone":"3","position":"6"},{"zone":"2","position":"6"},{"zone":"4","position":"6"},{"zone":"5","position":"6"},{"zone":"6","position":"1","width":"468","height":"60"},{"zone":"7","position":"6","width":"468","height":"60"},{"zone":"8","position":"0","width":"120","height":"600"},{"zone":"9","position":"7","width":"120","height":"600"},{"zone":"10","position":"0","width":"120","height":"600"},{"zone":"11","position":"0","width":"728","height":"90"},{"zone":"12","position":"0","width":"120","height":"90"},{"zone":"13","position":"1","width":"468","height":"60"},{"zone":"14","position":"3","width":"468","height":"60"},{"zone":"15","position":"1","width":"560","height":"40"},{"zone":"16","position":"4","width":"468","height":"60"},{"zone":"17","position":"6","width":"468","height":"60"},{"zone":"18","position":"6","width":"468","height":"60"},{"zone":"19","position":"7","width":"468","height":"60"}] } } 

Если вы заметили, даже там не должно быть ширина и высота, есть. Я хочу только ширину и высоту, когда $ row ['delivery'] равно 0,1 или 4. Но если он найдет значение 0,1 или 4, то даже если следующая строка не равна 0,1 или 4, печатает ширину и высоту. Есть ли способ исправить это? Я не знаю JSON и только начинал с PHP. Прямо сейчас, я не забочусь о недостающих тегах, например, длительности или написании предварительного ролика. Я позабочусь о них после того, как я это исправлю.

+0

это не имеет ничего общего с JSON, убедитесь, что вы получаете правильные данные в '$ return_arr'; т. е. использовать 'print_r ($ return_arr);' и посмотреть, что в нем – scibuff

+0

вы можете использовать 'json_encode ($ array)' и 'json_decode ($ value)' in build php function – Poonam

ответ

1

Проблема в вашем php. Вы не сбрасываете значения своего массива $row_array, поэтому при первом правиле условия, значения высоты и ширины сохраняются в массиве.

Вы можете исправить это следующим образом:

while ($doZones->fetch() && $row = $doZones->toArray()) { 
    $row_array['zone'] = $row['zoneid']; 
    $row_array['position'] = $row['delivery']; 

    if($row['delivery'] == 0 || $row['delivery'] == 1 || $row['delivery'] == 4){ 
     $row_array['width'] = $row['width']; 
     $row_array['height'] = $row['height']; 
    } 


    array_push($return_arr,$row_array); 
    // Add this line to reset the array and reset width/height 
    $row_array = array(); 
} 

$resultJSON .=json_encode($return_arr); 
+0

Спасибо большое, я не знал, что должен сделай это. Я приму ваш ответ за 50 секунд – Ada