2016-05-04 7 views
0

У меня такой массив. Есть один массив с тем же именем. Например, грант 1, грант 2 ... и у них много проектов, которые должны быть в одном месте. Например: Grant 1 должен содержать информацию, которая принадлежит к Гранту 1. То же самое, что должно произойти Гранту 2. И так далееКак объединить несколько массивов с одним и тем же ключом?

array:5 [▼ 
    0 => array:2 [▼ 
    0 => "Grant 1" 
    1 => Project {#423 ▶} 
    ] 
    1 => array:2 [▼ 
    0 => "Grant 1" 
    1 => Project {#421 ▶} 
    ] 
    2 => array:2 [▼ 
    0 => "Grant 2" 
    1 => Project {#412 ▶} 
    ] 
    3 => array:2 [▼ 
    0 => "Grant 1" 
    1 => Project {#424 ▶} 
    ] 
    4 => array:2 [▼ 
    0 => "Grant 2" 
    1 => Project {#419 ▶} 
    ] 
] 

Я хочу, чтобы объединить их:

array:5 [▼ 
    0 => array:2 [▼ 
    0 => "Grant 1" 
    1 => Project {#423 ▶} 
    2 => Project {#421 ▶} 
    3 => Project {#424 ▶} 
    ] 
    1 => array:2 [▼ 
    0 => "Grant 1"   
    1 => Project {#412 ▶} 
    2 => Project {#419 ▶} 
    ] 
] 

Пожалуйста Помогите. Спасибо,

ответ

0

Я думаю, что вы можете использовать foreach:

$newArray = []; 
foreach ($array as $value) { 
    $newArray[$value[0]][] = $value[1]; 
} 

И у вас есть массив как это:

array:5 [▼ 
    "Grant 1" => array:2 [▼ 
    1 => Project {#423 ▶} 
    2 => Project {#421 ▶} 
    3 => Project {#424 ▶} 
    ] 
    "Grant 2" => array:2 [▼ 
    1 => Project {#412 ▶} 
    2 => Project {#419 ▶} 
    ] 
] 

Или что-то вроде этого (спасибо @AbraCadaver):

$newArray = []; 
foreach ($array as $value) { 
    if (isset($newArray[$value[0]] { 
     $newArray[$value[0]][] = $value[1]; 
    } else { 
     $newArray[$value[0]] = $value; 
    } 
} 

Array, в котором вы нуждаетесь:

array:5 [▼ 
    0 => array:2 [▼ 
     0 => "Grant 1" 
     1 => Project {#423 ▶} 
     2 => Project {#421 ▶} 
     3 => Project {#424 ▶} 
    ] 
    1 => array:2 [▼ 
     0 => "Grant 1"   
     1 => Project {#412 ▶} 
     2 => Project {#419 ▶} 
    ] 
] 
+0

Thank Iwan! Вы сохранили мою жизнь @. @ –

+2

Второй foreach не нужен: 'foreach ($ array as $ value) { if (isset ($ newArray [$ value [0])) { $ newArray [$ value [0]] [ ] = $ value [1]; } else { $ newArray [$ value [0]] = $ value; } } ' – AbraCadaver

+0

@AbraCadaver да, это хорошо. Спасибо. – Iwan

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