我正在尝试提供一种处理可能非常大的数组的方法。我正在做的是使用facebook graph api。
因此,当用户注册我正在构建的服务时,我将他们的facebook id存储在我服务的表中。这样做的目的是允许注册我的服务的用户找到他们在Facebook上的朋友,并通过我的服务注册,以便更容易找到彼此。
我目前正在尝试做的是获取facebook api为/me/friends
数据返回的对象,并将其传递给我已经在我的数据库中为FB数据中找到的ID构建查询的函数哪个工作正常。虽然这一切都在进行,但我有一个只是facebook id的数组,所以我可以在in_array
场景中使用它们。因为我的查询只返回找到匹配的facebook id
虽然这个数据循环通过自己来创建查询,但我还更新了对象,以便在列表中每个项目包含一个以上的键/值对"are_friends"=> false
到目前为止,这一切都可以顺利进行快,我有我的查询结果。我正在循环。
所以我处在一个我希望避免在循环中循环的部分。这是in_array()
位的来源。由于我创建了存储的fb id的数组,我现在可以遍历我的结果以查看是否存在匹配,并且在那种情况下我想要获取我附加的原始对象'are_friends'=>false
来更改该集合中与“true”匹配的内容而不是false。如果没有循环遍历结果数组循环中的原始数组,我就无法想到一个好方法。
所以我希望有人可以帮助我在没有辅助循环的情况下找到解决方案
到目前为止,该数组从原始文件开始看起来像
Array(
[data](
[0] => array(
are_fb_friends => false
name => user name
id => 1000
)
[1] => array(
are_fb_friends => false
name => user name
id => 2000
)
[2] => array(
are_fb_friends => false
name => user name
id => 3000
)
)
)
根据要求
这是我目前的代码逻辑,我试图在上面描述..
public function fromFB($arr = array())
{
$new_arr = array();
if((is_array($arr))&&(count($arr) > 0))
{
$this->db->select()->from(MEMB_BASIC);
$first_pass = 0;
for($i=0;$i < count($arr);$i++)
{
$arr[$i]['are_fb_friends'] = "false";
$new_arr[] = $arr[$i]['id'];
if($first_pass == 0)
{
$this->db->where('facebookID', $arr[$i]['id']);
}
else
{
$this->db->or_where('facebookID', $arr[$i]['id']);
}
$first_pass++;
}
$this->db->limit(count($arr));
$query = $this->db->get();
if($query->num_rows() > 0)
{
$result = $query->result();
foreach($result as $row)
{
if(in_array($row->facebookID, $new_arr))
{
array_keys($arr, "blue");
}
}
}
}
return $arr;
}
答案 0 :(得分:5)
要搜索值并在数组中获取其键,可以使用返回元素键的array_search function。
$found_key = array_search($needle, $array);
对于PHP中的多维数组搜索,请查看https://stackoverflow.com/a/8102246/648044。
如果您担心优化,我认为您必须尝试在数据库上使用查询(使用正确的索引)。
顺便问一下,您使用的是Facebook Query Language吗?如果不试一试,这很有用。