5

我试图想出一种可能是非常大的数组集的工作方式。我正在做的是使用facebook图形API。PHP找到多维数组的数组索引键来更新数组

因此,当用户注册我正在构建的服务时,我将他们的Facebook ID存储在我的服务中的表格中。关键是允许注册我的服务的用户找到他们在Facebook上的朋友,并且通过我的服务注册了他们,以便更轻松地找到彼此。

我现在想要做的是将facebook api返回的对象作为/me/friends数据,并将其传递给一个函数,我已经建立一个查询到我的数据库中的FB数据中发现的ID,它工作正常。此外,虽然这一切正在进行,我有一个只是facebook id的建立阵列,所以我可以在in_array场景中使用它们。因为我的查询只返回找到的匹配的facebook编号

虽然此数据通过自身循环以创建查询,但我还更新了对象以包含列表中每个项目多一个键/值对,即"are_friends"=> false至此为止这一切运行平稳,相对较快,我有我的查询结果。我正在循环。

所以我在一个部分,我想避免循环内有一个循环。这是in_array()位进来的地方。因为我创建了存储的fb ID的数组,所以我现在可以循环查看结果,看看是否有匹配,并且在这种情况下,我想将'are_friends'=>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

你可以发布你的双循环当前代码,我不能完全理解你需要什么 – 2013-03-11 08:09:34

+0

编辑我的帖子,以反映代码以及 – chris 2013-03-11 12:35:46

回答

5

要搜索某个值并在数组中获取其密钥,可以使用array_search function,它返回该元素的键。

$found_key = array_search($needle, $array); 

对于PHP看看https://stackoverflow.com/a/8102246/648044多维数组的搜索。

如果您担心优化,我认为您必须尝试在数据库上使用查询(使用适当的索引)。

顺便说一句,您使用的是Facebook Query Language?如果不尝试,它是有用的。

+0

目前没有使用FBQL,我们正在做什么需要跨设备的点到我目前的知识不会为我们工作(我可能是错的)。但总的来说,图形API为我们的大多数普通需求提供服务,就FB相关的东西而言。 – chris 2013-03-11 16:30:53

+0

在附注中,'array_search()'将返回数组中索引的搜索数组?或者它发现搜索的数组中的索引。换句话说,从上面的例子,如果我搜索3000将返回一个“2”或“ID” – chris 2013-03-11 16:34:28

+0

@chris我已经更新了答案。 – Guglie 2013-03-11 20:45:34