如何将两个数组合并为一个多维数组

时间:2014-11-17 12:55:47

标签: php arrays

我有两个数组。数组1包含用户名和关联的ID。数组2包含相同的ID,时间戳和一些与该时间戳和该ID相关联的“关注者”。

示例,(这只是数据的一小部分):

$ accounts_list 数组

array(4) {
  [0]=> array(2) {
    ["id"]=> string(4) "1279"
    ["name"]=> string(13) "Something_big"
  }
}

$ followers_list 数组

array(12) {
  [0]=> array(3) {
    ["account_id"]=> string(4) "1279"
    ["date_time"]=> string(19) "2014-11-14 16:24:03"
    ["followers"]=> string(4) "1567"
  }
  [2]=> array(3) {
    ["account_id"]=> string(4) "1279"
    ["date_time"]=> string(19) "2014-11-14 18:52:35"
    ["followers"]=> string(4) "1566"
  }
  [8]=> array(3) {
    ["account_id"]=> string(4) "1279"
    ["date_time"]=> string(19) "2014-11-17 12:11:59"
    ["followers"]=> string(4) "1557"
  }
}

如您所见,$ followers_list数组存储特定ID的每个时间戳/日期的关注者。 ID与ID和名称匹配。

我想要做的是将数据组合成这样的东西:

$ new_array

array(1) {
      [0]=>
      array(2) {
        ["id"]=> string(4) "1279"
        ["name"]=> string(13) "Something_big"
        ["dates"]=>
            array(3) {
                ["date_time"]=> string(19) "2014-11-17 12:11:59"
                   array(1) {
                      ["followers"]=> string(4) "301"
                   }
                ["date_time"]=> string(19) "2014-12-17 13:10:32"
                   array(1) {
                      ["followers"]=> string(4) "307"
                   }
                ["date_time"]=> string(19) "2014-12-17 15:16:45"
                   array(1) {
                      ["followers"]=> string(4) "317"
                   }
            }
      }
}

希望你能看到我的意思,我希望每个日期的数组都包含关注者。这些日期应该在用户索引中。这样整个数组就可以存储每个用户的日期和关注者。

我试图弄清楚如何遍历$followers_list数组并将其添加到$accounts_list数组中,但我无法弄清楚如何将两个数组中的ID相互匹配。

你将如何创建这个数组?

这就是我的尝试:

$counter = 0;
foreach ($followers_data as &$follower_count){
    $timestamp = $follower_count['date_time'];
    $followers = $follower_count['followers'];
    $time_and_followers = [$timestamp,$followers];

    array_push($accounts_data[$counter],$time_and_followers);
    $counter++;
}

当然这不起作用,因为$ counter数字并不总是等于第一个数组中的帐户ID的索引。

2 个答案:

答案 0 :(得分:2)

您可以通过简单地使用帐户ID作为新数组的索引ID来实现此目的 例如。我们将声明一个名为$ new_tmp_array的临时变量;
首先,我们将使用以下代码添加帐户列表:

foreach($accounts_list as $account){
  $new_tmp_array[$account['id'] ] = $account;
}

现在是时候添加$ followers_list:

foreach($followers_list as $followers){
  $tmp = $followers;
  unset($tmp['account_id'])
  $new_tmp_array[$followers['account_id'] ] ['dates'][] = $tmp;
}

现在,对于没有帐户密钥的数组。

$new_array = array_values(new_tmp_array);

答案 1 :(得分:0)

我不确定这会是你想要的,但是试试看:

$new_array = $accounts_list;

foreach($new_array as &$account){
    foreach($followers_list as $follower){
        if($follower["account_id"] == $account["id"]){
            $account["dates"][] = array($follower["date_time"], $follower["followers"]);
        }
    }
}