5

Próbuję wymyślić sposób pracy z potencjalnie bardzo dużych zestawów tablic. Co robię to praca z api facebook graph.PHP znaleźć klucz tablicy tablicy wielowymiarowej do aktualizacji tablicy

Kiedy więc użytkownik zarejestruje się w usłudze, którą buduję, przechowuję jej identyfikator na Facebooku w tabeli w mojej usłudze. Chodzi o to, aby użytkownik, który zarejestruje się w mojej usłudze, znalazł znajomych swoich znajomych na Facebooku i zapisał się przez moją usługę, aby łatwiej się odnaleźć.

To, co próbuję obecnie zrobić, to pobranie obiektu, który api Facebook zwróci dla danych /me/friends i przekazanie tego do funkcji, którą mam do zapytania DB, aby znaleźć identyfikatory znalezione w danych FB, które działają dobrze . Również podczas gdy cały ten kawałek się dzieje, mam tablicę z budowaniem tylko facebook id, więc mogę użyć ich w scenariuszu in_array. Ponieważ moje zapytanie zwraca tylko identyfikator facebooka znaleziony pasujący

Podczas gdy te dane przechodzą same do siebie, aby utworzyć zapytanie, aktualizuję również obiekt, aby zawierał jeszcze jedną parę klucz/wartość dla pozycji na liście, która jest "are_friends"=> false Do tej pory wszystko działa sprawnie i relatywnie szybko, a mam wyniki zapytania. Które zapętlałem.

Więc jestem w części, w której chcę uniknąć pętli w pętli. Tutaj pojawia się bit in_array(). Ponieważ utworzyłem tablicę zapisanych identyfikatorów fb, mogę teraz przeglądać wyniki, aby sprawdzić, czy istnieje dopasowanie, i w tym przypadku chcę wziąć oryginalny obiekt, który dodałem do którego zmieniono i zmieniono na 'are_friends'=>false te w tym zestawie, które pasują do "prawdziwego" zamiast fałszywego. Po prostu nie mogę wymyślić dobrej drogi bez pętli nad oryginalną tablicą wewnątrz pętli, która jest tablicą wyników.

Więc mam nadzieję, że ktoś może mi pomóc wymyślić rozwiązanie tutaj bez tej pętli wtórnej

Tablica aż do tego stopnia, że ​​zaczyna się jak oryginalne wygląda jak

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 
         ) 
      ) 
    ) 

As na żądanie

To jest moja obecna logika kodu, którą próbuję opisać powyżej ..

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

czy możesz zamieścić swój aktualny kod podwójnej pętli, nie mogę idealnie zrozumieć, co potrzebujesz –

+0

edytował mój post, aby odzwierciedlić kod również – chris

Odpowiedz

5

Aby wyszukać wartość i uzyskać jej klucz w tablicy, można użyć wartości array_search function, która zwraca klucz elementu.

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

Aby uzyskać wielowymiarowe wyszukiwanie tablic w PHP, spójrz na numer https://stackoverflow.com/a/8102246/648044.

Jeśli martwisz się o optymalizację, myślę, że musisz spróbować użyć zapytania do bazy danych (z odpowiednim indeksowaniem).

Przy okazji, czy używasz Facebook Query Language? Jeśli nie spróbować, to jest przydatne.

+0

Nie używasz FBQL, to co robimy potrzebuje dostępu do punktu na urządzeniach, które moja obecna wiedza nie zadziała dla nas (mógłbym się mylić). Ogólnie jednak API wykresów służy nam w większości naszych ogólnych potrzeb, jeśli chodzi o rzeczy związane z FB. – chris

+0

Na marginesie, 'array_search()', które zwrócą indeks tablicy w jej poszukiwaniu? lub indeks w tablicy odnajduje wyszukiwanie. Innymi słowy, z powyższego przykładu, jeśli wyszukuję 3000, zwróci on "2" lub "id" – chris

+0

@chris Zaktualizowałem odpowiedź. – Guglie

Powiązane problemy