2016-07-07 3 views
0

많은 API 호출과 루프를 수행 한 후 배열을 만들었습니다. 이 배열은 다음 형식을 취합니다.두 배열 요소를 교차 비교

2 => array:3 [▼ 
    "someInfo" => array:1 [▶] 
    "existingIDs" => array:1 [▼ 
     0 => array:1 [▼ 
     "id" => "123456" 
     ] 
    ] 
    "idList" => array:2 [▼ 
     0 => array:1 [▼ 
     "id" => "123456" 
     ] 
     1 => array:1 [▼ 
     "id" => "777564" 
     ] 
    ] 
] 

내가 관심있는 부분은 existingIDs 및 idList입니다. 문제는 두 ID가 두 배열 요소에 모두 나타나므로 위의 예에서 id 123456이 둘 다에 나타납니다. 내가해야할 일은이 두 요소를 교차 비교하고 고유 ID로 새 요소를 만드는 것입니다. 위의 예는 다음과 같이 바뀔 수 있습니다.

2 => array:3 [▼ 
    "someInfo" => array:1 [▶] 
    "existingIDs" => array:1 [▼ 
     0 => array:1 [▼ 
     "id" => "123456" 
     ] 
    ] 
    "idList" => array:2 [▼ 
     0 => array:1 [▼ 
     "id" => "123456" 
     ] 
     1 => array:1 [▼ 
     "id" => "777564" 
     ] 
    ] 
    "uniqueList" => array:2 [ 
     0 => array:1 [ 
     "id" => "123456" 
     ] 
     1 => array:1 [ 
     "id" => "777564" 
     ] 
    ] 
] 

어떻게 이런 식으로 할 수 있습니까?

감사

+0

나는 가정 당신의 예제는 123456 그 새로운 요소의 일부가되어서는 안됩니까? 그냥 확인해. 터치 된 ID의 실행 목록을 유지하면서 idList를 반복해야합니다. 처음 발견 한 후이 목록에 ID를 추가하고 추적 목록에 포함되어 있으면 건너 뜁니다. – SArnab

답변

2

을 사용하여 다음과 같은 방법 array_column, array_mergearray_unique 기능 (사용 가능한 PHP 5.5부터) :

$arr = [ 
    "someInfo" => [], 
    "existingIDs" => [ 
     ["id" => "123456"] 
    ], 
    "idList" => [ 
     ["id" => "123456"], 
     ["id" => "777564"], 
     ["id" => "777564"] 
    ] 
]; 

$all_ids = array_merge(array_column($arr['existingIDs'], 'id'), array_column($arr['idList'], 'id')); 
$arr['uniqueList'] = array_unique($all_ids); 

print_r($arr); 

출력 :

Array 
(
    [someInfo] => Array 
     (
     ) 

    [existingIDs] => Array 
     (
      [0] => Array 
       (
        [id] => 123456 
       ) 
     ) 

    [idList] => Array 
     (
      [0] => Array 
       (
        [id] => 123456 
       ) 

      [1] => Array 
       (
        [id] => 777564 
       ) 

      [2] => Array 
       (
        [id] => 777564 
       ) 
     ) 

    [uniqueList] => Array 
     (
      [0] => 123456 
      [2] => 777564 
     ) 
)