Php gerekli LinkedIn tip arkadaşlar bağlantısı

2 Cevap php

Benim müşterilerinden biri için özel bir sosyal ağ oluşturma.

Bu I kullanım Aşağıdaki tabloda gösterildiği gibi, CSV şeklinde bir kullanıcının depolama arkadaşları am

uid    user_name      friends
1      John           2
2      Jack           3,1
3      Gary           2,4
4      Joey           3

Yukarıdaki senaryoda kullanıcı oturum, John ve o Joey profil sayfasını ziyaret ederse, aralarında bağlantı olarak görünmelidir

John-> Jack-> Gary-> Joey

Ben yani 1. seviyede bağlantı kurmak mümkün duyuyorum

Jack Joey adlı üyenin profilini ziyaret ederse ben aşağıdaki kurmak mümkün duyuyorum:

Jack-> Gary-> Joey

Ama 2. seviye için ben doğru çözüm değil biliyorum + ben de bu uygulamak mümkün değilim döngüler için aynı rutin içine almak gerekir.

Yani, birisi bana bu konuda yardımcı olur musunuz?

Thanks in Advance,
Akash

P: SI db mimarisini değiştirmek için bir konumda değilim: (

2 Cevap

İşte Yakut yazdığım bazı bfs kod; size şeyler php çevirmek için nasıl çalıştığını yeterince iyi bir fikir vermelidir. yapmanız gerekir diğer değişiklik geçerli kullanıcının arkadaşları almak için bir db sorgu ile grafik [mevcut] değiştirmektir.

def bfs(graph, start, stop)
  queue = [start]
  visited = {}
  parents = {}
  current = nil
  while true
    if queue.empty?
      return nil
    end
    current = queue.shift
    if current == stop
      return read_path(current, parents)
    end
    visited[current] = true
    graph[current].each do |i|
      if not visited[i] and not queue.index(i)
        parents[i] = current
        queue.push(i)
      end
    end
  end
end

def read_path(node, parents)
  a = [node]
  while parents[node]
    a.push(parents[node])
    node = parents[node]
  end
  return a.reverse
end

GRAPH = {
  "a" => ["b", "c"], 
  "b" => ["c", "d"],
  "c" => ["a", "e"],
  "d" => ["b", "c", "f"],
  "e" => ["c", "f"]
}

path = bfs(GRAPH, "a", "f")
p path

İşte bazı örnek kod:

<?php

$currentUID = 1; // The logged in user
$pageUID = 4; // The user whose page is being visited

// Parse the CSV
$csv = explode("\n", $csvData);
$csvlen = count($csv);
for($i=0;$i<$csvlen;$i++) {
    $csv[$i] = explode(",", $csv[$i]);
}

function getFriends($csv, $uid) {
    foreach($csv as $user)
    	if($user[0] == $uid)
    		return explode(',', $user[2]);
}

$userFriends = getFriends($csv, $currentUID);
$pageFriends = getFriends($csv, $pageUID);

$friendPool = array();
foreach($userFriends as $friend) {
    $hisFriends = getFriends($friend);
    foreach($hisFriends as $subFriend) {
    	if(in_array($subFriend, $pageFriends)) {
    		if(isset($friendPool[$friend]))
    			$friendPool[$friend][] = $subFriend;
    		else
    			$friendPool[$friend] = array( $subFriend );
    	}
    }
}

foreach($friendPool as $friend=>$subFriends)
    foreach($subFriends as $subFriend)
    	echo "$currentUID -> $friend -> $subFriend -> $pageUID\n";