2011-05-07 6 views
1

API 호출을 통해 매우 빠르게 반복하려하지만 다음 루프에서 매우 이상한 동작을 보게됩니다. (전체 배열을 반복하지 않습니다 .... 단지 1 또는 2 개의 레코드 만 씁니다.) :php api associative array

어떤 아이디어 :

$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

답변

2

의 foreach는 특정 배열의 첫 번째 단계를 통해 반복합니다. 여러분이 제시 한 것은 실제로 다른 배열 안에 중첩 된 배열입니다. 귀하의 예제에서 배열을 감안할 때 $ key는 결코 "id"와 같지 않습니다. 주어진 배열이 항상 정확하게 구성 할 경우,이 같은 "ID"에 접근해야합니다 실제로

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

편집, 조금 더 복잡한 이것보다의 ... 난 그냥 눈치 배열입니다 내가 처음 생각한 것보다 더 많이 중첩되어 있습니다. 즉, 중첩의 각 단계마다 반복 수준을 가져야 함을 의미합니다. 나는 전체 배열을보고 있어요 경우는 다음과 같이 시작할 수 있습니다

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

을 우리가 관심이있는 모두가 "데이터"연관 배열에있어 무엇 가정 ...

당신이 모르는 경우 배열이 얼마나 깊게 중첩되어 있고 어디서나 "id"필드 만 추출해야 할 필요가 있습니다. 처리하는 가장 쉬운 방법은 포함 된 루프가있는 재귀 함수입니다. 하지만 그건 다른 주제입니다 ...

+0

@ Abel-Mohler 감사합니다. – mhawk

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

+0

처음 두 줄을 첫 줄로 바꾸면됩니다. 답장을 전체 코드로 편집합니다. – c0mm0n