2013-10-05 3 views
-1

Я пытаюсь использовать json_decode для объединения нескольких объектов json. Мне нужно получить значения базы данных на основе идентификатора альбома. но я не мог этого.Как сделать json_decode из json_encode

может ли кто-нибудь сказать мне, где я совершил ошибку?

$album_ids_id = array("album_ids"=>array(2,4,5)); 
// $album_ids = $_REQUEST['alb_id']; 

$album_ids = json_encode($album_ids_id); 

$id_list_array = json_decode($album_ids,true); 

$id_array = $id_list_array->album_ids; 

var_dump($id_list_array); 

for($i=0;$i<sizeof($id_array);$i++) 
    { 

    $alb_id = $id_array[$i]->alb_id; 


    $album_sel_query = "SELECT a.a_id as id,a.a_name as name,round((b.total_value/b.total_votes),1) as rating,b.total_votes,b.total_value,a.a_pic as image,c.b_name FROM _album a inner join ratings b on b.id=a.a_id INNER JOIN _band c on c.b_id=a.b_id where a.a_id='".$alb_id."' "; 
    $result = mysql_query($album_sel_query); 
    if (!$result) 
     die("mySQL error: ". mysql_error()); 

    $count = mysql_num_rows($result); 

    if($count > 0) 
     { 

     while($data = mysql_fetch_array($result)) 
      { 
      $alb_name =$data['name']; 

      $singer = $data['b_name']; 

      $rating = $data['rating']; 

      $rate_value = $data['total_value']; 

      $rate_votes = $data['total_votes']; 

      $alb_pic =$data['image']; 
      $resmsg[] = array("Album_id"=>$alb_id,"Album_name"=>$alb_name,"Album_singer"=>$singer,"Album_rating"=>$rating,"Rating_total_value"=>$rate_value,"Rating_total_votes"=>$rate_votes,"Album_image_name"=>$alb_pic); 

      } 

     $jsonarr = array("response"=>array("success"=>"Y","ALBUM_DETAILS"=>$resmsg)); 
     } 
    else 
     { 
     $jsonarr = array("response"=>array("success"=>"N","ALBUM_DETAILS"=>"Data not found")); 
     } 
    } 
echo json_encode($jsonarr); 

так как я использовал var_dump() ,. выход показывает, что

array(1) { [0]=> array(1) { ["album_ids"]=> array(1) { ["alb_id"]=> string(1) "5" } } } {"response":{"success":"N","ALBUM_DETAILS":"Data not found"}} 

ответ

0

Это не имеет никакого отношения к json. Ошибка в первой строке. Вы используете три раза один и тот же ключ, но ключи массива уникальны.

array("alb_id"=>"2","alb_id"=>"4","alb_id"=>"5"); 

Должно быть:

array(2, 4, 5); 
+0

спасибо u ,. Я получил правильный формат массива. но все еще проблема с извлечением значения базы данных –

1

Во-первых, это не действует:

$album_ids_id = array("album_ids"=>array("alb_id"=>"2","alb_id"=>"4","alb_id"=>"5")); 

Ключ в массиве может иметь только одно значение, вы не можете иметь несколько alb_id ключи в том же массиве. Оно должно быть:

$album_ids_id = array("album_ids"=>array(2, 4, 5)); 

Во-вторых, так как вы даете true в качестве второго аргумента json_decode(), то возвращают ассоциативные массивы, а не объекты. Так

$id_array[] = $id_list_array->album_ids; 

должно быть:

$id_array = $id_list_array['album_ids']; 

заметить также, что не должно быть [] в конце $id_array - который используется только, когда вы хотите, чтобы нажать на новый элемент в массив, не когда вы назначаете переменную массива.

Затем измените for петлю на:

foreach ($id_array as $alb_id) { 

и избавиться от $alb_id присваивания внутри цикла.

+0

некоторой проблемой в моем foreach ???? –

+0

Не знаю, не так ли? – Barmar

+0

ya, если я использую foreach, он не принимает значение. –

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