2016-03-06 135 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)); 
}