【问题标题】:for each loop PHP Facebook对于每个循环 PHP Facebook
【发布时间】:2017-12-16 17:05:44
【问题描述】:

我尝试为我的论文制作一个网络应用程序。 实际上它几乎完成了,但我仍然需要找到一种方法将用户喜欢的内容存储在数据库中。我收集用户信息并尝试查看他或她喜欢的电影与保存在不同 SNS 中的用户数据元素之间是否存在关系。对于单个信息,它已经以应有的方式保存了内容。问题是,facebook 使用数组和对象,我无法找到一种方法将所有喜欢的内容保存在一个字符串中(然后将其保存在数据库中)。

// Insert or update user data to the database
$fbUserData = array(
    'oauth_provider'        => 'facebook',

    //basic profile
    'oauth_uid'             => $fbUserProfile['id'],
    'first_name'            => $fbUserProfile['first_name'],
    'last_name'             => $fbUserProfile['last_name'],
    'picture'               => $fbUserProfile['picture']['url'],
    'email'                 => $fbUserProfile['email'],
    'link'                  => $fbUserProfile['link'],
    'age_range'             => $fbUserProfile['age_range']['min'],
    'currency'              => $fbUserProfile['currency']['user_currency'],
    'devices'               => $fbUserProfile['devices'],//['hardware']
    'gender'                => $fbUserProfile['gender'],
    'install_type'          => $fbUserProfile['install_type'],
    'installed'             => $fbUserProfile['installed'],
    'is_shared_login'       => $fbUserProfile['is_shared_login'],
    'is_verified'           => $fbUserProfile['is_verified'],
    'locale'                => $fbUserProfile['locale'],
    'name_format'           => $fbUserProfile['name_format'],
    'payment_pricepoints'   => $fbUserProfile['payment_pricepoints'], //credits?
    'security_settings'     => $fbUserProfile['security_settings']['secure_browsing']['enabled'],
    'test_group'            => $fbUserProfile['test_group'],
    'timezone'              => $fbUserProfile['timezone'],
    'updated_time'          => $fbUserProfile['updated_time'],
    'verified'              => $fbUserProfile['verified'],
    'video_upload_limits'   => $fbUserProfile['video_upload_limits']['size'],
    'viewer_can_send_gift'  => $fbUserProfile['viewer_can_send_gift'],

    //extended permissions
    'relationship_status'   => $fbUserProfile['relationship_status'],
    'hometown'              => $fbUserProfile['hometown']['name'],
    'languages'             => $fbUserProfile['languages'][0]['name'].",".$fbUserProfile['languages'][1]['name'].",".$fbUserProfile['languages'][2]['name'].",".$fbUserProfile['languages'][3]['name'].",".$fbUserProfile['languages'][4]['name'],
    //'likes'               => $fbUserProfile['likes'][0]['name'].",".$fbUserProfile['likes'][1]['name']
    'favorite_athletes'     => $fbUserProfile['favorite_athletes'][0]['name'].",".$fbUserProfile['favorite_athletes'][1]['name'].",".$fbUserProfile['favorite_athletes'][2]['name'].",".$fbUserProfile['favorite_athletes'][3]['name'].",".$fbUserProfile['favorite_athletes'][4]['name'].",".$fbUserProfile['favorite_athletes'][5]['name'].",".$fbUserProfile['favorite_athletes'][6]['name'],

);
$userData = $user->checkUser($fbUserData);

//print
echo $userData['languages'];
echo $userData['favorite_athletes'];

正如你所看到的语言,喜欢,最喜欢的运动员我现在用丑陋的方式编码它来读取配置文件并存储它。问题是有的人点赞数超过100,这样编码当然不方便。当我使用 对于每一个它总是错误...

【问题讨论】:

  • 如果你只想连接一个数组,你可以使用 PHPs implode 函数
  • 您不应将所有喜欢的名称保存为单个数据库字段中的长字符串。而是规范化您的数据库,使用不同的表来存储类似的信息,并使用一个单独的表来链接两者。这同样适用于所有其他连接的值。
  • 它总是出错。这实际上是什么意思

标签: php facebook foreach


【解决方案1】:

如果您只想为单个表连接数组,请使用 PHP 内爆函数 http://php.net/manual/en/function.implode.php

结合这里提到的数组映射

How to use implode on an array of stdClass objects?

或者按照评论中提到的方式规范化您的数据库

    'favorite_athletes'     => implode(",", array_map(function($x) { return $x['name'];},$fbUserProfile['favorite_athletes']));
    'likes'               => implode(",", array_map(function($x){ return $x['name']}, $fbUserProfile['likes']['data']));

【讨论】:

    【解决方案2】:
    // Insert or update user data to the database
    $fbUserData = array(
        'oauth_provider'        => 'facebook',
    
        //basic profile
        'oauth_uid'             => $fbUserProfile['id'],
        'first_name'            => $fbUserProfile['first_name'],
        'last_name'             => $fbUserProfile['last_name'],
        'picture'               => $fbUserProfile['picture']['url'],
        'email'                 => $fbUserProfile['email'],
        'link'                  => $fbUserProfile['link'],
        'age_range'             => $fbUserProfile['age_range']['min'],
        'currency'              => $fbUserProfile['currency']['user_currency'],
        'devices'               => $fbUserProfile['devices'][0]['hardware'],
        'gender'                => $fbUserProfile['gender'],
        'install_type'          => $fbUserProfile['install_type'],
        'installed'             => $fbUserProfile['installed'],
        'is_shared_login'       => $fbUserProfile['is_shared_login'],
        'is_verified'           => $fbUserProfile['is_verified'],
        'locale'                => $fbUserProfile['locale'],
        'name_format'           => $fbUserProfile['name_format'],
        'payment_pricepoints'   => $fbUserProfile['payment_pricepoints'], //credits?
        'security_settings'     => $fbUserProfile['security_settings']['secure_browsing']['enabled'],
        'test_group'            => $fbUserProfile['test_group'],
        'timezone'              => $fbUserProfile['timezone'],
        'updated_time'          => $fbUserProfile['updated_time'],
        'verified'              => $fbUserProfile['verified'],
        'video_upload_limits'   => $fbUserProfile['video_upload_limits']['size'],
        'viewer_can_send_gift'  => $fbUserProfile['viewer_can_send_gift'],
    
        //extended permissions
        'relationship_status'   => $fbUserProfile['relationship_status'],
        'hometown'              => $fbUserProfile['hometown']['name'],
        'languages'             => implode(",", array_map(function($x) { return $x['name'];},$fbUserProfile['languages'])),//$fbUserProfile['languages'][0]['name'].",".$fbUserProfile['languages'][1]['name'].",".$fbUserProfile['languages'][2]['name'].",".$fbUserProfile['languages'][3]['name'].",".$fbUserProfile['languages'][4]['name'],
        'likes'               => implode(",", array_map(function($x){ return $x['name'];}, $fbUserProfile['likes']['data'])),
        'favorite_athletes'     => implode(",", array_map(function($x) { return $x['name'];},$fbUserProfile['favorite_athletes']))
    

    【讨论】:

      猜你喜欢
      • 2012-01-14
      • 2013-11-22
      • 2020-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多