2016-03-06 133 views
0

我正在为Android应用创建自己的API,但我似乎无法解决此问题。 (注意这是我的第一个PHP项目)。将元素添加到foreach循环中的关联数组

我想要实现的是将一个元素添加到关联数组中,然后将其编码为JSON,但是我所做的唯一的事情是每次循环重复导致JSON格式不正确时对JSON进行编码。

这与循环

function checkLike($media_id, $user1_id, $access_token){ 

    $url = 'https://api.instagram.com/v1/media/'.$media_id.'/likes?access_token='.$access_token; 

    $json1 = file_get_contents($url); 

    $arr1 = json_decode($json1); 

    $arr = array('media_id' => $media_id, 'hasLiked' => 0); 


    if(is_array($arr1->data)){  
     foreach ($arr1->data as $key => $value) { 
      //echo 'Comprobando el id '.$value->id.' deberia ser '. $user1_id.' '; 

      if($value->id === $user1_id){ 
       $arr = array('media_id' => $media_id, 'hasLiked' => 1); 
      }else{ 
       echo 'nope'; 
      } 

     }encode_json($arr); 
    }else{ 
     echo 'false1'; 
    } 

} 

的功能,这是其他环路它正在从

$json = file_get_contents('https://api.instagram.com/v1/users/self/media/recent/?access_token='.$token.'&count=5'); 

$arr = json_decode($json); 



if (is_array($arr->data)) { 
    foreach ($arr->data as $key => $value) { 
     checkLike($value->id, get_user_id($user, $token), $token); 
    } 
} 

但是叫,我得到的JSON如下:

{"media_id":"1198059901794013237_483636171","hasLiked":0} 
{"media_id":"1196611512178987610_483636171","hasLiked":1} 
{"media_id":"1195162888588906891_483636171","hasLiked":1} 
{"media_id":"1193726158308528216_483636171","hasLiked":1} 
{"media_id":"1192260158916546943_483636171","hasLiked":1} 

我需要做些什么才能得到这样的东西?

{ 
    "photos":[ 
     { 
     "mediaID":"1198059901794013237_483636171", 
     "hasLiked":0 
     }, { 
     "mediaID":"1196611512178987610_483636171", 
     "hasLiked":1 
     } 
    ] 
} 
+0

'$ ARR =阵列( “照片”=>数组( 'media_id'= $ media_id,“hasLiked '=> 1));' – devpro

+0

或外部循环..'encode_json(array(“photos”=> $ arr));' – devpro

+0

我认为encode_json是这里的错字 – devpro

回答

0

只需更换这行:

json_encode($arr); 

有了:

json_encode(array("photos"=>$arr)); 
1

你与每一个循环覆盖你的阵列。在你的循环变化这条线如下:然后

$arr[] = array('media_id' => $media_id, 'hasLiked' => 1); 

$arr将是一个数组的数组,当,当你调用json_encode($arr)外循环,你会得到一个JSON字符串的所有数据。

这里是完全固定的代码 - 这应该工作,但我还没有尝试过:

function checkLike($media_id, $user1_id, $access_token){ 

    $url = 'https://api.instagram.com/v1/media/'.$media_id.'/likes?access_token='.$access_token; 

    $json1 = file_get_contents($url); 

    $arr1 = json_decode($json1); 

    // Initialize and add first element to array 
    $arrJSON[] = array('media_id' => $media_id, 'hasLiked' => 0); 

    if(is_array($arr1->data)){ 

     foreach ($arr1->data as $key => $value) {   

      if($value->id === $user1_id){ 

       // Add to $arrJSON 
       $arrJSON[] = array('media_id' => $media_id, 'hasLiked' => 1); 

      }else{ 

       echo 'nope'; 

      } 
     } 

    } else { 

     echo 'false1'; 

    } 

    // Encode entire array as JSON and echo 
    echo json_encode($arrJSON); 
} 
+0

谢谢,刚刚尝试过,但这是输出:'[[{“media_id”:“1198059901794013237_483636171”,“hasLiked”:0}]] [[{“media_id”:“1196611512178987610_483636171”,“hasLiked”:0}, {“media_id”:“1196611512178987610_483636171”,“hasLiked”:1}] [[“media_id”:“1195162888588906891_483636171”,“hasLiked”:0},{“media_id”:“1195162888588906891_483636171”,“hasLiked”:1} ]] [[“media_id”:“1193726158308528216_483636171”,“hasLiked”:0},{“media_id”:“1193726158308528216_483636171”,“hasLiked”:1}]] [[“media_id”:“1192260158916546943_483636171”,“hasLiked “:0},{”media_id“:”1192260158916546943_483636171“,”hasLiked“:1}]]' – ivykoko

+0

它创建第二个条目,而不是修改第一个条目,以防万一它被喜欢。 – ivykoko

+0

Nvm,我解决了,谢谢! – ivykoko

0

好吧,我试图创建函数内部的数组,但我以后都做到了函数被调用。我使用该函数返回用户喜欢照片的布尔值。的代码是:

的checkLike功能

function checkLike($media_id, $user1_id, $access_token){ 

    $url = 'https://api.instagram.com/v1/media/'.$media_id.'/likes?access_token='.$access_token; 

    $json1 = file_get_contents($url); 

    $arr1 = json_decode($json1); 

    $hasLiked = false; 

    if(is_array($arr1->data)){  
     foreach ($arr1->data as $key => $value) { 
      //echo 'Comprobando el id '.$value->id.' deberia ser '. $user1_id.' '; 

      if($value->id === $user1_id){ 
       $hasLiked = true; 
      }else{ 
       echo 'nope'; 
      } 

     } 
    }else{ 
     echo 'false'; 
    } 

    return $hasLiked; 

} 

的主要代码:

$json = file_get_contents('https://api.instagram.com/v1/users/self/media/recent/?access_token='.$token.'&count=5'); 

$media_array= json_decode($json); 

if (is_array($media_array->data)) { 
    foreach ($media_array->data as $key => $value) { 
     $mediaID = $value->id; 
     if(checkLike($mediaID, get_user_id($user, $token), $token)){ 
      $arrJSON[] = array('media_id' => $mediaID, 'hasLiked' => 1); 
     }else{ 
      $arrJSON[] = array('media_id' => $mediaID, 'hasLiked' => 0); 
     } 
    } 

    encode_json(array('photos'=>$arrJSON)); 
}