2013-09-25 2 views
0

У меня есть это SQL заявление, в моих list_user_ads() функция, которая будет найти объявление и изображения для конкретного пользователявзрываются ключ в формате JSON с PHP

$row = $this->db->dbh->prepare('SELECT ad.*, (SELECT GROUP_CONCAT(img.image) FROM '.$this->config->db_prefix.'_images AS img WHERE img.aid = ad.aid) AS img FROM '.$this->config->db_prefix.'_adverts ad WHERE fid = :fid ORDER BY cr_date DESC'); 

и это

$res = $adverts->list_user_ads($id->fid); 
json_encode($res); 

даст мне JSON, который выглядит следующим образом:

[ 
    { 
     "aid": "80", 
     "fid": "703640495", 
     "title": "gxj", 
     "text": "Hbccgg", 
     "price": "800.00", 
     "category": "10", 
     "friends_allow": "1", 
     "cr_date": "1380010359", 
     "expiry_date": "1385197959", 
     "approved": "1", 
     "ip": "80.164.52.106", 
     "name": "Morten Peter Hagh Jensen", 
     "email": "[email protected]", 
     "publish_email": "1", 
     "zip_for_pickup": "9000", 
     "views": "4", 
     "num_reports": "0", 
     "img": "703640495-1380010326490.jpg,703640495-rt804-villa-a_9.jpg" 
    }, 
    { 
     "aid": "76", 
     "fid": "703640495", 
     "title": "Hfjg", 
     "text": "Chef", 
     "price": "4645.00", 
     "category": "1", 
     "friends_allow": "1", 
     "cr_date": "1380009351", 
     "expiry_date": "1385196951", 
     "approved": "1", 
     "ip": "80.164.52.106", 
     "name": "Morten Peter Hagh Jensen", 
     "email": "[email protected]", 
     "publish_email": "1", 
     "zip_for_pickup": "9000", 
     "views": "2", 
     "num_reports": "0", 
     "img": "703640495-image_20.jpg" 
    } 
] 

изображения через запятую, но я должен взорвать этот ключ, поэтому я получить результат будет выглядеть так:

[ 
    { 
     "aid": "80", 
     "fid": "703640495", 
     "title": "gxj", 
     "text": "Hbccgg", 
     "price": "800.00", 
     "category": "10", 
     "friends_allow": "1", 
     "cr_date": "1380010359", 
     "expiry_date": "1385197959", 
     "approved": "1", 
     "ip": "80.164.52.106", 
     "name": "Morten Peter Hagh Jensen", 
     "email": "[email protected]", 
     "publish_email": "1", 
     "zip_for_pickup": "9000", 
     "views": "4", 
     "num_reports": "0", 
     "img": [{ 
      "703640495-1380010326490.jpg", 
      "703640495-rt804-villa-a_9.jpg" 
     }] 
    }, 
    { 
     "aid": "76", 
     "fid": "703640495", 
     "title": "Hfjg", 
     "text": "Chef", 
     "price": "4645.00", 
     "category": "1", 
     "friends_allow": "1", 
     "cr_date": "1380009351", 
     "expiry_date": "1385196951", 
     "approved": "1", 
     "ip": "80.164.52.106", 
     "name": "Morten Peter Hagh Jensen", 
     "email": "[email protected]", 
     "publish_email": "1", 
     "zip_for_pickup": "9000", 
     "views": "2", 
     "num_reports": "0", 
     "img": [{"703640495-image_20.jpg"}] 
    }] 

Но я не могу понять, как это сделать.

Я попытался использовать foreach и взорвал $ value ["img"] и поместил его в массив, а затем присоединил этот массив с массивом $ res, но это поместило изображения отдельно в нижней части объекта json.

ВОЗМОЖНОЕ РЕШЕНИЕ:

foreach($res as $key => $value) { 
    $images[] = array("images" => explode(",", $value["img"])); 
} 

$new = array_replace_recursive($res, $images); 

ответ

1

Вы можете использовать array_map на вашем $ Реза обработать каждый пункт перед json_encode его.

Что-то вроде

$return = array_map(
    function($item) { $item['img'] = explode(',', $item['img']; return $item; }, 
    $res 
); 
json_encode($res); 
+0

Сладкое! Я также нашел решение, которое работает, как отредактировано в моем ответе, но ваше проще. Спасибо! –

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