-1

json_decode を使用していくつかの json オブジェクトを結合しようとしています。アルバム ID に基づいてデータベースの値を取得する必要があります。しかし、私はそれをすることができませんでした。

誰かが私がどこで間違いを犯したか教えてもらえますか?

$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"}} 
4

2 に答える 2

1

まず、これは有効ではありません:

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

配列内のキーは 1 つの値しか持てませんalb_id。同じ配列内に複数のキーを持つことはできません。そのはず:

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

次に、trueの 2 番目の引数として を指定しているため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ループ内の割り当てを取り除きます。

于 2013-10-05T07:49:41.400 に答える
0

これはjsonとは関係ありません。エラーは最初の行にあります。同じキーを 3 回使用しますが、配列キーは一意です。

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

でなければなりません :

array(2, 4, 5);
于 2013-10-05T07:47:21.787 に答える