ассоциативный массив php api - PullRequest
1 голос
/ 07 мая 2011

Я пытаюсь перебрать вызов API очень быстро, но я вижу очень странное поведение со следующим циклом (не перебирает весь массив .... записывает только 1 или 2 записи):

Любые идеи:

$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
                )

Ответы [ 2 ]

2 голосов
/ 07 мая 2011

foreach только проходит через первый уровень любого данного массива. То, что вы представили, фактически является массивами, вложенными в другие массивы. Учитывая массив в вашем примере, $ key никогда не будет равен "id". Если массив всегда будет структурирован точно так, как задано, вы должны получить доступ к «id» следующим образом:

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

РЕДАКТИРОВАТЬ на самом деле, это немного сложнее, чем это ... Я просто заметил, что массив еще более вложен, чем я думал, что означает, что вы должны иметь зацикливание для каждого уровня вложенности. Если я вижу весь массив, он может начаться так:

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

при условии, что все, что нас интересует, находится в ассоциативном массиве "data" ...

Если вы не знаете, насколько глубоко будет вложенный массив, и вам действительно нужно извлечь только поле «id», где бы оно ни находилось, самый простой способ обработать его - это рекурсивная функция с замкнутым циклом. Но это совсем другая тема ...

0 голосов
/ 07 мая 2011

Не должно ли быть

$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++;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...