因此,当用户注册我正在构建的服务时,我将他们的facebook id存储在我的服务中的表中.这样做的目的是允许注册我的服务的用户找到他们在Facebook上的朋友,并通过我的服务注册,以便更容易找到彼此.
我目前正在尝试做的是获取facebook api为/ me / friends数据返回的对象,并将其传递给我已经为我的数据库构建查询的函数,以获取在FB数据中找到的ID,该工作正常.虽然这一切都在进行,但我有一个只是facebook id的数组,所以我可以在in_array场景中使用它们.因为我的查询只返回找到的facebook id匹配
虽然这个数据循环通过自身来创建查询,但我还更新了对象,以便在列表中的每个项目中包含一个更多的键/值对,即“are_friends”=>到目前为止,它一切顺利,相对较快,我有我的查询结果.我正在循环.
所以我处在一个我希望避免在循环中循环的部分.这是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; }
$found_key = array_search($needle,$array);
对于PHP中的多维数组搜索,请查看https://stackoverflow.com/a/8102246/648044.
如果您担心优化,我认为您必须尝试在数据库上使用查询(使用正确的索引).
顺便问一下,你使用的是Facebook Query Language吗?如果不试一试,它很有用.