【问题标题】:PHP find the array index key of multi dimensional array to update arrayPHP找到多维数组的数组索引键来更新数组
【发布时间】:2013-02-26 07:19:01
【问题描述】:

我正在尝试想出一种方法来处理可能非常大的数组集。我正在做的是使用 facebook graph api。

因此,当用户注册我正在构建的服务时,我会将他们的 facebook id 存储在我服务的表中。这样做的目的是让注册了我的服务的用户可以找到他们在 facebook 上并且也通过我的服务注册的朋友,以便更轻松地找到彼此。

我目前正在尝试做的是获取 facebook api 为 /me/friends 数据返回的对象,并将其传递给一个函数,我已经为我的数据库构建了一个查询,以获取在 FB 数据中找到的 ID 有效美好的。此外,虽然这一切都在进行,但我已经建立了一系列 facebook id,因此我可以在in_array 场景中使用它们。因为我的查询只返回 facebook id 找到的匹配项

虽然这些数据正在循环自身以创建查询,但我还更新了对象以在列表中的每个项目中包含一个键/值对 "are_friends"=> false 到目前为止,这一切都运行顺利且相对较快,我有我的查询结果。我正在循环播放。

所以我正处于一个我想避免在循环中出现循环的部分。这就是 in_array() 位的来源。由于我创建了存储的 fb id 的数组,我现在可以遍历我的结果以查看是否有匹配项,在这种情况下,我想获取我附加的原始对象 @987654325 @ 并将该集中匹配的那些更改为“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
                        )
            )
    )

根据要求

这是我当前的代码逻辑,我试图在上面描述..

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;
}

【问题讨论】:

  • 你能把你的双循环当前代码贴出来吗,我不能完全理解你需要什么
  • 编辑了我的帖子以反映代码

标签: php arrays facebook facebook-graph-api multidimensional-array


【解决方案1】:

要在数组中搜索值并获取其键,您可以使用返回元素键的array_search function

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

对于 PHP 中的多维数组搜索,请查看 https://stackoverflow.com/a/8102246/648044

如果您担心优化,我认为您必须尝试在数据库上使用查询(使用适当的索引)。

顺便问一下,你用的是Facebook Query Language吗?不试一试,很有用。

【讨论】:

  • 目前不使用 FBQL,我们正在做的事情需要跨设备访问一个点,据我目前所知,这对我们不起作用(我可能错了)。但总的来说,就 FB 相关的内容而言,图形 API 可以满足我们的大部分一般需求。
  • 在旁注中,array_search() 会返回其搜索的数组中的数组索引吗?或它找到搜索的数组中的索引。换句话说,如果我搜索 3000,它会从上面的示例中返回“2”还是“id”
  • 数组搜索我认为可能适用于我以后的一些需求,但是到另一篇文章的链接可以确定它。我对其进行了一些修改,但总体而言,它确实符合需求,尽管我真的不想在数据集上花费额外的时间,但我认为这是一个不可避免的邪恶。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-25
  • 2017-07-17
  • 1970-01-01
  • 2021-02-05
相关资源
最近更新 更多