2015-06-08 119 views
2

我想从API中获取一些数据,并将其放入数组,然后将其放入MySQL中。PHP数组foreach

我的代码:

$find_sql = "SELECT * FROM `scrape`"; 
$users_to_scrape = $app['db']->fetchAll($find_sql); 

$instagram = $app['instagram']; 

$oauth = json_decode(file_get_contents($app['oauth_path'])); 

$instagram->setAccessToken($oauth); 

foreach($users_to_scrape as $user_to_scrape) { 
    printf("Getting info for %s <%s>\n", $user_to_scrape['instagram_id'], $user_to_scrape['user_name']); 
    $follows = $instagram->getUser($user_to_scrape['instagram_id'], 999); 

     foreach($follows->data as $follow) { 
      echo var_dump($follows); 
      $data = array(
       'instagram_id' => $follow->id, 
       'followed_by_instgram_id' => $user_to_scrape['instagram_id'], 
       'user_name' => $follow->username, 
       'full_name' => iconv('UTF-8', 'UTF-8//IGNORE', utf8_encode($follow->full_name)), 
       'profile_picture' => $follow->profile_picture, 
       'followers' => $follow->counts->followed_by, 
       'follows' => $follow->counts->follows 
      ); 
      printf("+ %s <%s>\n", $data['instagram_id'], $data['user_name']); 
       //skapa tabell med follows (instagram_id, 

      if ($follow->counts->followed_by >= "30000") { 
       $app['db']->insert('follows', $data); 
      } 
     } 
    } 

的Vardump返回此:

object(stdClass)#111 (2) { 
    ["meta"]=> 
    object(stdClass)#112 (1) { 
    ["code"]=> 
    int(200) 
    } 
    ["data"]=> 
    object(stdClass)#113 (7) { 
    ["username"]=> 
    string(9) "Dimbos" 
    ["bio"]=> 
    string(97) "•Have fun in life Contact: [email protected]" 
    ["website"]=> 
    string(24) "http://www.life.com" 
    ["profile_picture"]=> 
    string(106) "https://xxertt.com/hphotos-ak-xaf1/t51.2885-19/11311351_362556250614181_543_a.jpg" 
    ["full_name"]=> 
    string(10) "Dimbo" 
    ["counts"]=> 
    object(stdClass)#114 (3) { 
     ["media"]=> 
     int(113) 
     ["followed_by"]=> 
     int(256673) 
     ["follows"]=> 
     int(345) 
    } 
    ["id"]=> 
    string(8) "38353560" 
    } 
} 

我收到的错误是这样的:

注意:试图让非财产 - 对象/var/www/script.php在线

第40行,我们有这样的: 'instagram_id' => $follow->id, 我还对下面的一组阵列得到错误。

难以想象。

+0

根据'var_dump'看起来'$ follow'只是'follow'的一个实例,而不是'foreach'所期望的'follow'的数组。 – chiliNUT

回答

3

由于$follows->datastdClass对象,具有foreach将循环在每个其属性的迭代它单独地,返回每个属性的值。这意味着虽然id存在于循环中,但它仅仅是循环的最后一个数据元素,它的属性名称不可访问。

使用foreach$follow直接产生价值,而不是性能,迭代器值,如下所示:

// Value of $follow on each loop iteration: 
"Dimbos" 
"•Have fun in life Contact: [email protected]" 
"http://www.life.com" 
// etc... 

你不需要foreach循环。相反,访问每一个元素的$follows->data直接:

// Remove the foreach loop 
$data = array(
    // Each property is directly accessible in $follows->data 
    'instagram_id' => $follows->data->id, 
    'followed_by_instgram_id' => $user_to_scrape['instagram_id'], 
    'user_name' => $follows->data->username, 
    'full_name' => iconv('UTF-8', 'UTF-8//IGNORE', utf8_encode($follows->data->full_name)), 
    'profile_picture' => $follows->data->profile_picture, 
    'followers' => $follows->data->counts->followed_by, 
    'follows' => $follows->data->counts->follows 
); 
printf("+ %s <%s>\n", $data['instagram_id'], $data['user_name']); 
    //skapa tabell med follows (instagram_id, 

if ($follows->data->counts->followed_by >= "30000") { 
    $app['db']->insert('follows', $data); 
} 

您可以创建引用data属性,让你用更少的代码访问这些内部性质的变量,但我不认为这是必要的。

// Refer to data in $follow 
$follow = $follows->data; 
echo $follow->id; 
echo $follow->counts->followed_by; 
// etc...