json在codeigniter中编码和解码数组

时间:2013-07-29 11:04:30

标签: php codeigniter

我在codeigniter中做我的项目。我的问题是我将以json格式存储'game_aspect_details'的值,如

"{"game_aspect_details":[{"aspect_id":"1"},{"aspect_id":"4"}]}"

对于这个选择查询,我将解码json格式并在foreach中检查该值。

    $this->db->select('game_aspect_details');
    $this->db->from('share_reviews');
    $this->db->where('review_id',6);
    $query = $this->db->get();
    $result = $query->result();
    $test = $result[0]->game_aspect_details;
    $res = json_decode($test);
    $result_array = array();        
    foreach ($res as $row)
    {            
        $this->db->select('comments');
        $this->db->from('review_ratings');
        $this->db->where('game_aspect_id',$row->game_aspect_details); //here i need
        $query1 = $this->db->get();                            to check 1 and 4 
        $resultReviews['comments'] = $query1->result();
        $result_array[] = $resultReviews;

    }
    print_r($res);
    exit;

2 个答案:

答案 0 :(得分:2)

首先,您可以使用$row查看foreachprint_r()内的内容。

我希望您需要更换以下内容

$this->db->where('game_aspect_id',$row->game_aspect_details);

以下一行:

$this->db->where('game_aspect_id',$row['aspect_id']);

因为$row是一个数组而不是一个对象。

<强>编辑:

foreach ($res as $rows)
{            
    foreach ($rows as $row)
    {            
    ........
    $this->db->where('game_aspect_id',$row['aspect_id']); //here make change
    .....
    }
}

答案 1 :(得分:1)

您做错了,请参阅此代码中的注释:

...
//$test = $result[0]->game_aspect_details; // This does not work since $result is not decoded yet
$res = json_decode($result); // Changed to `$result` instead of `$test`
$res = $res->game_aspect_details; // Instead pick the `game_aspect_details` here, after the decode
$result_array = array();        
foreach ($res as $row)
{            
    $this->db->select('comments');
    $this->db->from('review_ratings');
    $this->db->where('game_aspect_id',$row['aspect_id']); // Changed to `aspect_id`
    $query1 = $this->db->get();
    $resultReviews['comments'] = $query1->result();
    $result_array[] = $resultReviews;
}
...