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

배열이

$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

먼저 인덱싱을 $array2을 위해 아래의 코드를 사용합니다. array_column이 쉽게 할 수 있습니다

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

그런 다음 일치하는 'id' 키가 $array1의 각 값에 대해 $array2에서 키를 덮어 씁니다.

+0

맞아, 여기 내 실수 였어. 고마워요 !!! – AlexB

+0

반갑습니다. –

2

array_unique()은 기본적으로 2 차원 배열을 비교하도록 설계되었습니다. 둘 이상의 레벨이있는 ​​배열을 비교하려면 array_unique()의 두 번째 매개 변수로 SORT_REGULAR을 전달해야합니다.

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

고맙지 만 여전히 25 개의 키 대신 29 개의 키가 있으므로 여전히 4 개의 키가 중복되어 있습니다. 어떤 아이디어? – AlexB

+0

@AlexB 배열 값이 같지 않습니다. 비교중인 두 번째 배열의 하위 배열은 모두 'file_version'에 대해 'null'을 갖지만 첫 번째 배열의 해당 sub_arrays에는 'file_version'에 대해 '1.0.2'가 있습니다. 이러한 하위 배열 값은 정확히 동일해야합니다. –

+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);