2009-08-07 17 views
2

讓我們說;PHP數組可以做到這一點嗎?

我有一個$朋友陣列與2000不同的friendID號

+

我有一個$公告陣列10000個bulletinID數字,$公告陣列也將有一個用戶ID的另一個值誰發佈了公告條目

現在是否有可能獲得所有具有與友人數組中的userID匹配的userID的公告ID號碼?如果甚至有可能,這是快速還是緩慢,或者通常不是一個好方法?我正在嘗試在我的網站上獲取公告類型帖子,並僅顯示由用戶的朋友發佈的帖子,但某些用戶有幾千個朋友,公告可能在成千上萬,但只有其中一些用戶可以查看

此外,如果這是可能的,我能限制它OLY得到像匹配friendID

回答

1

好的,所以它聽起來像你有一個不關聯的朋友ID數組,即array(0 => 'userid0', 1 => 'userid1', etc),和一組公告ID,關聯,即。 array('bulletin1' => 'userid1', 'bulletin2' => 'userid2', etc)

按照這個假設,你可以使用array_intersect()得到所有匹配的公告。然後,您可以採取的前五公告鍵與array_slice()

$matchingBulletins = array_intersect($bulletins, $friends); 
$first50 = array_slice(array_keys($matchingBulletins),0,50); 

這聽起來像你可能會然而,得到這個數據從數據庫中,在這種情況下,它會更謹慎以某種方式過濾數據庫的結果和避免每次返回10,000個ID。您可以在右邊的桌子上使用JOIN s和WHERE s進行分類和過濾。

+0

非常感謝大家對於使用數據庫來獲得結果可能是正確的,但我正在緩存好友列表數組,所以我正在尋找所有可能的方式來做到這一點,我認爲最好的方法是測試每種方法 – JasonDavis 2009-08-07 12:03:35

0

的前50點公告的ID如果要發佈一個比特的每個陣列(未全部10000個項目,前10個會做)你可能會得到更多的叮咬。

在此期間退房array_search()

1

我在這裏假設您的$ friends數組只是一個整數數組,而$bulletins中的每個項目都是一個包含userId和一些額外字段的數組。

$len = count($bulletins); 
$matchedBulletins = array(); 
for ($i = 0; $i < $len; $i++) { 
    if (in_array($bulletins[$i]['userId'], $friends) { 
     $matchedBulletins[] = $bulletins[$i]; 
    } 
} 

如果你不想限制這個數組像50個第一個記錄只是在循環內添加一個條件。

$len = count($bulletins); 
$matchedBulletins = array(); 
$bulletinsCount = 0; 
for ($i = 0; $i < $len; $i++) { 
    if (in_array($bulletins[$i]['userId'], $friends) { 
     $matchedBulletins[] = $bulletins[$i]; 
     $bulletinsCount++ 
     if ($bulletinsCount == 50) { 
      break; 
     } 
    } 
} 
6

你從哪裏得到這些數以千計的朋友/公告?如果答案是關係數據庫(MySQL,PostgreSQL),那麼應該使用SQL查詢來完成,因爲它非常簡單,而且比在PHP中可以做的任何事情都高效得多。

下面是如何可以在SQL中做了一個例子:

SELECT 
    posts.id 
FROM posts 
JOIN users ON posts.user_id = users.id 
JOIN user_friends ON user_friends.user_id = users.id 
WHERE posts.type = 'bulletin' 
AND user_friends.user_id = 7 
LIMIT 50; 

顯然是不實際的數據庫結構的知識去做,如果有的話,因此將無法正常工作,是的,但應該讓你走上正確的道路。

+0

我的第一個想法是...... – 2009-08-07 05:43:10

+0

查看其他方法的原因是因爲朋友陣列來自緩存 – JasonDavis 2009-08-07 14:28:45

+0

公告是否也來自緩存? – hobodave 2009-08-07 15:39:59

相關問題