2016-07-29 203 views
0

我有2個數組,我需要合併來創建另一個具有唯一值的數組。數組2是可能的文件版本的完整列表,而數組1是這些文件的當前版本。如果從陣列1和陣列2項具有相同的id價值,我想從陣列採取項目1合併陣列輸出一個只有唯一值的數組

陣列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'), 
); 

陣列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' => '') 
); 

我不斷收到嘗試使用以下內容時出錯:

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

這是錯誤:

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

線30 print_r()

我怎麼能這些陣列一起與id唯一值合併嗎?

回答

1

首先重新索引$array2array_column可以使這個簡單的:

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

然後覆蓋的鑰匙,$array2$array1具有匹配'id'關鍵的每個值。

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

你是對的,這是我的錯。非常感謝!!! – AlexB

+0

不客氣。 –

2

array_unique()被設計爲默認比較2維數組。如果要比較多個級別的陣列,則需要傳入SORT_REGULAR作爲array_unique()的第二個參數。

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

謝謝,但我仍然得到29鍵而不是25,所以有4個鍵仍然是重複值。任何想法爲什麼? – AlexB

+0

@AlexB您的數組值不相等。你要比較的第二個數組中的子數組都有'null'作爲'file_version',而第一個數組中的相應子數組具有'1.0.2'作爲'file_version'。這些子數組值必須完全相等。 –

+0

所以file_extension_id,但這兩個參數是無關的,因爲我只是真的需要比較id。有沒有辦法解決它? – AlexB

0

array_unique()不適用於多維數組。 使用以下代碼用於使用id多維陣列

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