5

Я пытаюсь придумать способ работы с тем, что потенциально может быть очень большим набором массивов. То, что я делаю, работает с графиком facebook api.PHP найти ключ индекса массива многомерного массива для обновления массива

Поэтому, когда пользователь подписывается на службу, которую я создаю, я храню свой идентификатор facebook в таблице в своем сервисе. Дело в том, чтобы позволить пользователю, который подписывается на мою службу, найти друзей, которые находятся на facebook, а также зарегистрировались в моем сервисе, чтобы найти друг друга легче.

То, что я пытаюсь сделать в настоящее время, - это взять объект, возвращаемый facebook api для данных /me/friends, и передать его функции, которую я создаю в моей базе данных для идентификатора, найденного в данных FB, который отлично работает , Кроме того, в то время как весь этот бит продолжается, у меня есть массив только для создания facebook id, поэтому я могу использовать их в сценарии in_array. Поскольку мой запрос возвращает только найденный facebook id

Хотя эти данные зацикливаются на себе, чтобы создать запрос, я также обновляю объект, чтобы содержать еще одну пару ключ/значение для каждого элемента в списке, который равен "are_friends"=> false. До сих пор все работает плавно и относительно быстро, и у меня есть результаты моего запроса. Который я зацикливаюсь.

Так что я нахожусь в той части, где хочу избежать петли в цикле. Вот где бит in_array() приходит. Поскольку я создал массив сохраненных идентификаторов fb, я могу теперь перебирать мои результаты, чтобы увидеть, есть ли совпадение, и в этом случае я хочу взять исходный объект, который я добавил 'are_friends'=>false, и изменить его те в этом наборе, которые соответствуют «true», а не 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 
         ) 
      ) 
    ) 

As по запросу

Это мой текущий код логики, что я пытаюсь описать выше ..

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

Вы можете опубликовать свой текущий код с двойным циклом, я не могу понять, что вам нужно –

+0

отредактировал мое сообщение, чтобы отразить код – chris

ответ

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

+0

На стороне примечания, 'array_search()' будет возвращать индекс массива внутри массива, который он ищет? или индекс внутри массива находит поиск. Другими словами, это из приведенного выше примера, если я буду искать 3000, он вернет «2» или «id» – chris

+0

@chris. Я обновил ответ. – Guglie

Смежные вопросы