9

非常に大きな配列セットになる可能性があるものを操作する手段を考え出そうとしています。私がやっていることは、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;
}
4

1 に答える 1

7

値を検索して配列内のキーを取得するには、要素のキーを返すarray_search 関数を使用できます。

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

PHP での多次元配列検索については、https://stackoverflow.com/a/8102246/648044を参照してください。

最適化が心配な場合は、(適切なインデックスを使用して) データベースでクエリを使用してみる必要があると思います。

ところで、あなたはFacebook Query Languageを使っていますか? 試してみなければ、便利です。

于 2013-03-11T14:52:06.693 に答える