非常に大きな配列セットになる可能性があるものを操作する手段を考え出そうとしています。私がやっていることは、Facebook グラフ API を操作することです。
そのため、私が構築しているサービスにユーザーがサインアップすると、Facebook ID をサービスのテーブルに保存します。これのポイントは、私のサービスにサインアップしたユーザーが、Facebook にいて、私のサービスを通じてサインアップした友人を簡単に見つけることができるようにすることです。
私が現在やろうとしているのは、facebook api がデータに対して返すオブジェクトを/me/friends
取得し、それを関数に渡し、FB データで見つかった ID について DB にクエリを作成することです。これは正常に機能します。また、この全体が進行している間、in_array
シナリオで使用できるように、Facebook ID の配列だけが蓄積されています。私のクエリはFacebook IDの見つかった一致のみを返すため
このデータはそれ自体をループしてクエリを作成しますが、オブジェクトを更新して、リストのアイテムごとにもう 1 つのキーと値のペアを含めます。"are_friends"=> false
これまでのところ、すべてスムーズに動作し、比較的高速であり、クエリの結果が得られます。 . 私はループしています。
だから私は、ループ内にループを持たないようにしたい部分にいます。これがin_array()
ビットの出番です。保存されたfb idの配列を作成したので、結果をループして一致があるかどうかを確認できます。その場合、追加'are_friends'=>false
した元のオブジェクトを取得して変更しますそのセットでは、false ではなく「true」に一致します。結果配列であるループ内の元の配列をループせずに良い方法を考えることはできません。
だから私は誰かがその二次ループなしでここで解決策を考え出すのを手伝ってくれることを望んでいます
元のように始まるこの時点までの配列は次のようになります
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;
}