1

我试图在不使用 PHP SDK 的情况下使用 Facebook 应用程序返回用户的朋友列表。我设法在不使用身份验证码的情况下返回用户姓名、性别等。我现在试图返回一个用户朋友的姓名列表,到目前为止我所做的只是打印数组,我似乎不能只打印名称,因为它的布局与用户姓名、性别等不同我设法通过这样做来回应:

$user->name

但是当我为朋友列表尝试它时它不起作用并且根本没有回应任何东西,我只是想知道是否有人知道我是如何做到这一点的?

使用 print_r 我得到以下信息:

Array(
[0] => Array ( [name] => Friend's name [id] => x )
[1] => Array ( [name] => Friend's name [id] => x )
[2] =>....)

直到所有的朋友都被列出来。


 { "name": "Name", 
    "hometown": {
      "id": "Hometown_id", 
      "name": "Hometown"
    }, 
    "id": "Friend_id" }

以上是每个数组的结构,我认为一个潜在的问题是不是每个人都有家乡集,这可能是我收到 forEach 错误的原因?

4

2 回答 2

1

鉴于该数组结构,获得您想要的东西非常简单(在 php 中)。我建议阅读 php 的数组手册。

试试这样的事情:

foreach ($array as $inner_array) {
    echo $inner_array['name'] . "<br />";
}

除此之外,这将是...

echo $your_array[0]['name'];
echo $your_array[1]['name'];

等等等等第四个..

更新:

你现在看到的不是一个数组,而是一个 javascript 对象。它被称为JSON:Javascript 对象表示法。

您需要一个特殊的解析器将其解释为一个数组:json_decode(),它随 php 大于或等于 5.2.0 一起提供。要使数组具有关联性,您必须传递第二个参数,一个布尔值,true. 它默认为false其他。使用示例:

$json = '{ "name": "Name", 
    "hometown": {
      "id": "Hometown_id", 
      "name": "Hometown"
    }, 
    "id": "Friend_id" }';

$json_arr = json_decode($json,true);

foreach ($json_arr as $key => $var) {
    if (!is_array($var)) {
        if ($key == 'name') {
            echo $var . "<br />";
        }
    }
}

更新 2:

foreach ($json_arr as $key => $var) {
    if (!is_array($var)) {
        if ($key == 'name') {
            echo "Name: " . $var . "<br />";
        }
    }
    else {
        if ($key == 'hometown') {
            echo "Hometown: " . $var['name'] . "<br />";
        }
    }
}

以上应该做你需要的。

于 2013-02-10T05:26:04.170 回答
0

从 Facebook 查询特定数据的最佳方式是 FQL。查看https://developers.facebook.com/docs/technical-guides/fql/并告诉我您是否正在寻找。

我提供的链接上的示例将抓取所有活跃用户的朋友。如果您使用示例作为启动器(已为您的应用程序填写了所有正确的信息以及有效的访问令牌),然后转到它所说的区域// run fql query并更改uid2name以下行:

fql?q=SELECT+uid2+FROM+friend+WHERE+uid1=me()

然后将以下内容添加到脚本的末尾会将所有朋友的姓名填充到名为的数组中$names

$r = $fql_multiquery_obj['data'][0]['fql_result_set'];
foreach ($r as $u)
{
    $name[count($name)] = $u['name'];
}

这能帮助你做你想做的事吗?让我知道 :)

于 2013-02-10T05:13:40.327 回答