2016-08-23 1 views
0

zusammenführen wie kann ich 2 Array mit dem gleichen Schlüssel, Wert-Paar in PHP unten ist die zurückgegebene Daten zusammenführen.wie Array mit demselben Schlüssel, Wert-Paar

array:8 
    0 => array:3 
    "group" => array:2 
     "id" => 1 
     "name" => "data 1" 
    ] 
    "brief" => array:5 
    "tasks" => array:1 
    ] 
    1 => array:3 
    "group" => array:2 
     "id" => 1 
     "name" => "data 1" 
    ] 
    "brief" => array:5 
    "tasks" => array:1 
    ] 
    2 => array:3 
    3 => array:3 
    4 => array:3 
    5 => array:3 
    "group" => array:2 
     "id" => 6 
     "name" => "data 5" 
    ] 
    "brief" => array:5 
    "tasks" => array:1 
    ] 
    6 => array:3 
    "group" => array:2 
     "id" => 6 
     "name" => "data 5" 
    ] 
    "brief" => array:5 
    "tasks" => array:1 
    ] 
    "totalHours" => "31" 
] 

Ich brauche Array zu fusionieren [0] und array [1] mit gleichen array [5] und array [6], da sie beide die gleichen Gruppenschlüssel und Wert haben. Ich benutze Laravel BTW.

+0

also wirklich nur Dubletten entfernen? – tam5

+0

Wenn Sie 'array_unique ($ yourArray, SORT_REGULAR)' aufrufen, erhalten Sie ein neues Array ohne doppelte Einträge. Da Sie erwähnt haben, dass Sie Laravel verwendet haben, könnte es sich lohnen, zu prüfen, ob Sie das Erstellen von Duplikaten an erster Stelle verhindern können, wenn dieses Array erstellt wird. – tam5

+0

ein bisschen entfernen Duplikate, aber in meinem Fall muss ich es zusammenführen, weil ich seine Aufgaben und Aufgaben behalten muss. Also in Array [0] sollte 1 Gruppe 2 kurz und 2 Aufgaben – PenAndPapers

Antwort

1

Sie könnten etwas wie das folgende versuchen. Ermitteln Sie, welche Elemente in Ihrem Array die gleichen Gruppen-IDs haben. Fügen Sie dann die Elemente oder die Schlüssel, die Sie zusammenführen möchten, zusammen.

Hier verwende ich array_merge_recursive, aber es fusioniert die ID und Name Felder in ein Array und ersetzt damit den Gruppenschlüssel. Aber seien Sie vorsichtig hier, Sie möchten vielleicht expliziter sein, was Sie zusammenführen möchten. Vielleicht nur die Aufgaben und Anweisungen in Ihrem Fall.

<?php 
$items = [ 
    [ 
     'group' => [ 
      'id' => '23', 
      'name' => 'peach' 
      ], 
     'tasks' => ['foo', 'bar'] 
    ], 
    ['big', 'fat', 'mamma'], 
    [ 
     'group' => [ 
      'id' => '23', 
      'name' => 'peach' 
      ], 
     'tasks' => ['baz', 'bat'] 
    ], 
]; 

$groupIds = []; 
foreach($items as $key => $item) { 
    if(isset($item['group'])) { 
     $groupIds[$item['group']['id']][] = $key; 
    } 
} 

foreach($groupIds as $group_id => $item_keys) { 
    $merged_item = array(); 
    foreach($item_keys as $key) { 
     $merged_item = array_merge_recursive($merged_item, $items[$key]); 
     $merged_item['group'] = $items[$key]['group']; 
     unset($items[$key]); 
    } 
    array_push($items, $merged_item); 
} 

var_export($items); 

Ausgang:

array (
    1 => 
    array (
    0 => 'big', 
    1 => 'fat', 
    2 => 'mamma', 
), 
    3 => 
    array (
    'group' => 
    array (
     'id' => '23', 
     'name' => 'peach', 
    ), 
    'tasks' => 
    array (
     0 => 'foo', 
     1 => 'bar', 
     2 => 'baz', 
     3 => 'bat', 
    ), 
), 
) 
+0

Dank @Progrock sein – PenAndPapers

0

Sie können die Laravel Sammlung verwenden unique method.

Damit können Sie einen Schlüssel festlegen, mit dem definiert werden soll, was eindeutig ist.

Sie können eine verschachtelte Eigenschaft auswählen, die mit der Punktsyntax zusammengeführt werden soll. d.h. group.id.

$merged = collect($original)->unique('group.id'); 
Verwandte Themen