2016-07-29 12 views
0

Ich habe zwei Arrays, die ich zusammenführen muss, um ein weiteres Array mit eindeutigen Werten zu erstellen. Array 2 ist die vollständige Liste der möglichen Dateiversionen und Array 1 sind die aktuellen Versionen der Dateien. Wenn Elemente von Array 1 und Array 2 mit der gleichen id Wert haben, möchte ich aus den Artikel nehmen Array 1.Array zusammenführen, um ein Array mit nur eindeutigen Werten auszugeben

Array 1

$array1 = array(
    array('id' => '8','file_extension_id' => '8','extension' => '','name' => 'GS','file_version' => '1.0.2'), 
    array('id' => '2','file_extension_id' => '2','extension' => 'gif', 'name' => 'GIF','file_version' => '1.0.2'), 
    array('id' => '1','file_extension_id' => '1','extension' => 'png','name' => 'PNG','file_version' => '1.0.2'), 
    array('id' => '19','file_extension_id' => '19','extension' => 'jpg','name' => 'JPG','file_version' => '1.0.2'), 
    array('id' => '20','file_extension_id' => '20','extension' => 'pdf','name' => 'PDF','file_version' => '1.0.2'), 
); 

Array 2

$array2 = array(
    array('id' => '1','file_extension_id' => '','extension' => 'png','name' => 'PNG','file_version' => ''), 
    array('id' => '2','file_extension_id' => '','extension' => 'gif','name' => 'GIF','file_version' => ''), 
    array('id' => '3','file_extension_id' => '','extension' => 'doc','name' => 'Word 2003','file_version' => ''), 
    array('id' => '4','file_extension_id' => '','extension' => 'docx','name' => 'Word 2007+','file_version' => ''), 
    array('id' => '5','file_extension_id' => '','extension' => 'xlsx','name' => 'Excel 2010+','file_version' => ''), 
    array('id' => '6','file_extension_id' => '','extension' => 'docx','name' => 'Word 2010+','file_version' => ''), 
    array('id' => '7','file_extension_id' => '','extension' => 'numbers','name' => 'Mac Numbers','file_version' => ''), 
    array('id' => '8','file_extension_id' => '','extension' => '','name' => 'GS','file_version' => ''), 
    array('id' => '9','file_extension_id' => '','extension' => '','name' => 'Google Docs','file_version' => ''), 
    array('id' => '10','file_extension_id' => '','extension' => 'ots','name' => 'OpenOffice.org Calc','file_version' => ''), 
    array('id' => '11','file_extension_id' => '','extension' => 'ott','name' => 'OpenOffice.org Writer','file_version' => ''), 
    array('id' => '12','file_extension_id' => '','extension' => 'xlsx','name' => 'Excel for iPad','file_version' => ''), 
    array('id' => '13','file_extension_id' => '','extension' => 'xlsm','name' => 'Excel 2007 Macros','file_version' => ''), 
    array('id' => '14','file_extension_id' => '','extension' => 'xlsm','name' => 'Excel 2010 Macros','file_version' => ''), 
    array('id' => '15','file_extension_id' => '','extension' => 'xlsx','name' => 'Excel 2013+','file_version' => ''), 
    array('id' => '16','file_extension_id' => '','extension' => 'xlsm','name' => 'Excel 2013 Macros','file_version' => ''), 
    array('id' => '17','file_extension_id' => '','extension' => 'xlsx','name' => 'Excel 2016','file_version' => ''), 
    array('id' => '18','file_extension_id' => '','extension' => 'xlsm','name' => 'Excel 2016 Macros','file_version' => ''), 
    array('id' => '19','file_extension_id' => '','extension' => 'jpg','name' => 'JPG','file_version' => ''), 
    array('id' => '20','file_extension_id' => '','extension' => 'pdf','name' => 'PDF','file_version' => ''), 
    array('id' => '21','file_extension_id' => '','extension' => 'xlsx','name' => 'Excel for iPhone','file_version' => ''), 
    array('id' => '22','file_extension_id' => '','extension' => 'xlsx','name' => 'Excel for Android','file_version' => ''), 
    array('id' => '23','file_extension_id' => '','extension' => 'xls','name' => 'Excel 2003 Macros','file_version' => ''), 
    array('id' => '24','file_extension_id' => '','extension' => 'docx','name' => 'Word 2013+','file_version' => ''), 
    array('id' => '25','file_extension_id' => '','extension' => 'docx','name' => 'Word 2016','file_version' => '') 
); 

Ich erhalte ein Fehler beim Versuch, Folgendes zu verwenden:

$fileInVersion = array_merge($fileExists,$soft); 
print_r(array_unique($fileInVersion)); 

Hier ist ein Fehler:

Notice: Array to string conversion in /file.php on line 30

Die Linie 30 ist print_r()

Wie kann ich diese Arrays zusammen mit eindeutigen Werten für id fusionieren?

Antwort

1

Erste reindex $array2 Verwendung id. array_column kann dies einfach machen:

$array2 = array_column($array2, null, 'id'); 

dann die Schlüssel in $array2 für jeden Wert in $array1 überschreiben, die einen passenden 'id' Schlüssel haben.

foreach ($array1 as $key => $value) { 
    $array2[$value['id']] = $value; 
} 
+0

Richtig du bist, es war mein Fehler hier. Danke vielmals!!! – AlexB

+0

Gern geschehen. –

2

array_unique() wurde entwickelt, um zweidimensionale Arrays standardmäßig zu vergleichen. Wenn Sie Arrays mit mehr als einer Ebene vergleichen möchten, müssen Sie SORT_REGULAR als zweiten Parameter von array_unique() übergeben.

print_r(array_unique($fileInVersion, SORT_REGULAR)); 
+0

Danke, aber ich bekomme immer noch 29 statt 25 Tasten, also gibt es 4 Schlüssel, die immer noch doppelte Werte sind. Irgendwelche Ideen warum? – AlexB

+0

@AlexB Ihre Array-Werte sind nicht gleich. Die Sub-Arrays in dem zweiten Array, das Sie vergleichen, haben 'null' für' file_version', während die entsprechenden sub_arrays im ersten Array '1.0.2' für' file_version' haben. Diese Sub-Array-Werte müssen genau gleich sein. –

+0

So wie file_extension_id, aber diese beiden Parameter sind irrelevant, da ich nur wirklich id vergleichen muss. Gibt es einen Weg dahin? – AlexB

0

array_unique() ist nicht für die Arbeit mit multidimensionalen Arrays vorgesehen. Verwenden den folgenden Code für mehrdimensionale Arrays

$fileInVersion = array_merge($fileExists,$soft); 
$unique_array = array_map("unserialize", array_unique(array_map("serialize", $fileInVersion))); 
print_r($unique_array); 
Verwandte Themen