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