2014-11-17 3 views
0

У меня есть два массива. Массив 1 содержит имена пользователей и связанные идентификаторы. В массиве два содержат одинаковые идентификаторы, временную метку и число «последователей», связанных с этой меткой времени и этим идентификатором.Как объединить два массива в один многомерный массив

Примеры, (это лишь малая часть данных):

$ 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 хранит последователей за метку времени/дату для определенного идентификатора. Идентификатор совпадает с идентификатором и именем.

То, что я пытаюсь сделать, это объединить данные вместе во что-то вроде этого:

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

Конечно, это на самом деле не работает, потому что $ номер счетчика не всегда совпадает с индексом счета ID в первом массиве.

+0

Вы пробовали '$ accounts_list [0] [ "даты"] = $ followers_list;'? –

+0

Индекс '$ accounts_list' с идентификатором в качестве ключа. –

+0

@CharlesRojas, который не дает правильного результата вообще: http://pastebin.com/Z826d7h7 – Francesca

ответ

2

Вы можете сделать это, просто используя идентификатор учетной записи в качестве идентификатора индекса для нового массива.
например. мы объявим временную переменную с именем $ 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); 
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"]); 
     } 
    } 
} 
Смежные вопросы