2015-04-21 2 views
0

У меня есть запрос, который возвращает тысячи массивов с контактной информацией. Каждый из них имеет идентификатор пользователя (IndvID), связанный с ним. Мне нужно объединить массивы с соответствующими идентификаторами пользователя в многомерном массиве.Объединение многомерных массивов в PHP

Так что:

Array 
(
    [EmailID] => 1 
    [IndvID] => 78 
    [EmailType] => Business 
    [Preferred] => false 
    [Email] => [email protected] 
    [Listed] => true 
    [!diffgr:id] => dbs71 
    [!msdata:rowOrder] => 0 
) 
Array 
(
    [EmailID] => 2 
    [IndvID] => 78 
    [EmailType] => Personal 
    [Preferred] => true 
    [Email] => [email protected] 
    [Listed] => true 
    [!diffgr:id] => dbs72 
    [!msdata:rowOrder] => 1 
) 
Array 
(
    [EmailID] => 3 
    [IndvID] => 85 
    [EmailType] => Personal 
    [Preferred] => true 
    [Email] => [email protected] 
    [Listed] => true 
    [!diffgr:id] => dbs73 
    [!msdata:rowOrder] => 2 
) 
Array 
(
    [EmailID] => 4 
    [IndvID] => 86 
    [EmailType] => Personal 
    [Preferred] => true 
    [Email] => [email protected] 
    [Listed] => true 
    [!diffgr:id] => dbs74 
    [!msdata:rowOrder] => 3 
) 

Становится

array[0]( 
     Array[0] 
     (
      [EmailID] => 1 
      [IndvID] => 78 
      [EmailType] => Business 
      [Preferred] => false 
      [Email] => [email protected] 
      [Listed] => true 
      [!diffgr:id] => dbs71 
      [!msdata:rowOrder] => 0 
     ) 
     Array[1] 
     (
      [EmailID] => 2 
      [IndvID] => 78 
      [EmailType] => Personal 
      [Preferred] => true 
      [Email] => [email protected] 
      [Listed] => true 
      [!diffgr:id] => dbs72 
      [!msdata:rowOrder] => 1 
     ) 
    ) 
     Array[1] 
     (
      [EmailID] => 3 
      [IndvID] => 85 
      [EmailType] => Personal 
      [Preferred] => true 
      [Email] => [email protected] 
      [Listed] => true 
      [!diffgr:id] => dbs73 
      [!msdata:rowOrder] => 2 
     ) 
     Array[2] 
     (
      [EmailID] => 4 
      [IndvID] => 86 
      [EmailType] => Personal 
      [Preferred] => true 
      [Email] => [email protected] 
      [Listed] => true 
      [!diffgr:id] => dbs74 
      [!msdata:rowOrder] => 3 
     ) 

Matching друг с другом "IndvID"

+4

Вы что-то пробовали? – Rizier123

+1

Можете ли вы показать свой код для массива ist? –

+3

Добро пожаловать в переполнение стека! Этот вопрос немного короткий по информации. Можете ли вы поделиться тем, что вы пробовали, и с какими проблемами вы столкнулись? –

ответ

1

Вот один из способов. Создает результат со значением IndvID в качестве ключа, а затем подматрицы под. Нас интересуют array_values, если вы хотите изменить порядок основных показателей:

$result = array(); 

foreach($array as $values) { 
    $result[$values['IndvID']][] = $values; 
} 
// if you want to reset the keys 
$result = array_values($result); 
+0

С ответом на вопросы, где не было никаких усилий, вы поддерживаете такое поведение! – Rizier123

0

Довольно прямо вперед, чтобы сделать, я сделал ключ агрегированного массиву IndvID, чтобы сделать вещи еще проще, если это не в порядке, то пусть меня знаю, и я отрегулирую ответ.

function add_to_array(array $array, & $aggregated_array) 
{ 
    if (! isset($array['IndvID'])) 
     return false; 

    $aggregated_array[$array['IndvID']][] = $array; 
} 

$aggregated_array = array(); 
// Run query here... 
// I'm assuming mysqli here as it's what I mostly use, substitute as necessary 
while ($row = $result->fetch_assoc()) 
{ 
    add_to_array($row, $aggregated_array); 
} 

print_r($aggregated_array); 
Смежные вопросы