2011-05-07 86 views
1

我想通過一個API調用非常迅速,但我看到非常奇怪的行爲與以下循環(不循環通過整個數組....只寫1或2記錄):php api關聯數組

任何想法:

$i = 0; 
foreach($userfriends as $key => $value) { 

    if($key == "id"){ 
    $friend_id = $value;   
    } 

    try { 
    $username = $friend_id; 
    $uservar = '/'.$username.'/likes?fields=id,category&limit=20'; 
    $userlikes = $facebook->api($uservar); 
    }   

    catch (FacebookApiException $e) { 
    error_log($e); 
    } 


    $id = $userlikes[data][$i][id]; 
    $cat = $userlikes[data][$i][category]; 


    // WRITING FRIEND LIKES TO DATABASE 

    $sql="INSERT INTO likes (like_id, category, friend_id) VALUES ('$id', '$cat', '$friend_id');"; 
    mysql_query($sql,$con); 



$i++; 
} 

數組userfriends看起來是這樣的:

Array 
(
    [data] => Array 
     (
      [0] => Array 
       (
        [id] => 123123 
       ) 

      [1] => Array 
       (
        [id] => 456456 
       ) 

      [2] => Array 
       (
        [id] => 634476 
       ) 
+0

我也看到這個錯誤:「錯誤:重複條目」 – mhawk 2011-05-07 00:42:51

回答

2

的foreach只有通過任何給定陣列的第一級環路。你提出的實際上是嵌套在其他數組中的數組。鑑於你的例子中的數組,$ key永遠不會等於「id」。如果數組總是會完全按照給定的結構,你應該訪問「身份證」是這樣的:

foreach($userfriends as $key=>$value) { 
    $friend_id = $value['id']; 
} 

編輯實際上,它比這個稍微複雜一點......我只注意到該陣列甚至比我第一次想到的更嵌套,這意味着您必須對每個嵌套級別有一個循環級別。如果我看到整個數組,它可能會開始像這樣:

foreach($userfriends['data'] as $key=>$value { 

假設所有我們感興趣的是什麼是「數據」關聯數組中......

如果你不知道數組的嵌套深度如何,你真的需要只提取「id」字段,最簡單的方法就是使用一個包含循環的遞歸函數。但這是一個整體的其他話題...

+0

@ Abel-Mohler謝謝 – mhawk 2011-05-07 01:30:15

0

它不應該是

$i = 0; foreach($userfriends['data'] as $key => $value) { 
/* YOUR STUFF */ 
$i++; 
} 

編輯

完整代碼

$i = 0; 
foreach($userfriends['data'] as $key => $value) { 

if($key == "id"){ 
$friend_id = $value;   
} 

try { 
$username = $friend_id; 
$uservar = '/'.$username.'/likes?fields=id,category&limit=20'; 
$userlikes = $facebook->api($uservar); 
}   

catch (FacebookApiException $e) { 
error_log($e); 
} 


$id = $userlikes[data][$i][id]; 
$cat = $userlikes[data][$i][category]; 


// WRITING FRIEND LIKES TO DATABASE 

$sql="INSERT INTO likes (like_id, category, friend_id) VALUES ('$id', '$cat', '$friend_id');"; 
mysql_query($sql,$con); 



$i++; 
} 
+0

它應該是什麼? – mhawk 2011-05-07 01:15:15

+0

只需用我的第一行替換您的前兩個ligne,然後設置好。 我使用完整的代碼編輯我的回覆 – c0mm0n 2011-05-07 01:17:29