2015-07-06 3 views
0

У меня есть огромный список массивов с 2-х участниками, которые выглядят так:Merge массив по ключу в PHP

<?php 
$aData = array(); 
$aData[0] = array (14400, 'Item1'); 
$aData[1] = array (14400, 'Item4'); 
$aData[2] = array (14401, 'Item2'); 
$aData[3] = array (14402, 'Item4'); 
$aData[4] = array (14402, 'Item5'); 
$aData[5] = array (14402, 'Item9'); 

и я хотел бы, чтобы преобразовать это в массивы так:

$aData[0] = array (14400, 'Item1,Item4'); 
$aData[1] = array (14401, 'Item4'); 
$aData[2] = array (14402, 'Item4,Item5,Item9'); 

Принимая во внимание, что второй может быть строкой или массивом. Теперь я пытался реализовать некоторую логику - но есть ли функция, которая могла бы сделать это хотя бы частично? array_map или array_merge_recursive не подходят точно?

+0

Ой .. извините - совершенно забыл язык – Chris

+0

Можете ли вы дать нам массив? Это так? $ array = array ('14400' => 'Item1', '14400' => 'Item4', '14401' => 'Item2', '14402' => 'Item4', '14402' => 'Item5', ' '14402' => 'Item9'); –

+0

Непонятно, что вы просите. Заголовок вопроса, похоже, подразумевает, что вы ищете алгоритм, но информации о входных данных недостаточно, чтобы дать точный ответ. Является ли ввод одной строкой? Это массив, содержащий строки? Пожалуйста, укажите фактические структуры данных, которые вы используете в своем вопросе. – tarleb

ответ

0

Потому что вы не знаете, чего хотите. Вы можете легко получить такой результат»

$arr = [ 
[14400,Item1], 
[14400,Item4], 
[14401,Item2], 
[14402,Item4], 
[14402,Item5], 
[14402,Item9] 
]; 

$new = []; 
foreach($arr as $item) 
    $new[$item[0]][] = $item[1]; 

print_r($new); 

результат

Array 
(
[14400] => Array 
     (
     [0] => Item1 
     [1] => Item4 
    ) 

[14401] => Array 
    (
     [0] => Item2 
    ) 

[14402] => Array 
    (
     [0] => Item4 
     [1] => Item5 
     [2] => Item9 
    ) 
) 
+0

Ох ... право - это так легко и ясно видеть его сейчас. Наверное, мне нужно продолжить завтра - слишком много часов сегодня. Большое спасибо за это решение. – Chris

+0

Рад помочь. Пожалуйста – splash58

0

Используйте Карту (Int -> список строк)

for each (key,value) pair 
    map.get(key).add(value) 

Какой язык вы используете?

Смежные вопросы