2016-07-07 16 views
0

Nach vielen API-Aufrufe und Schleifen habe ich ein Array erstellt. Dieses Array hat die folgende FormVergleichen Sie zwei Array-Elemente

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" 
     ] 
    ] 
] 

Der Teil Ich bin an ist existingIDs und idlist. Das Problem ist, dass einige IDs in beiden Array-Elementen auftreten, so dass im obigen Beispiel die ID 123456 in beiden erscheint. Was ich tun muss, ist Cross-Vergleich dieser beiden Elemente und vielleicht ein neues Element mit einzigartigen IDs erstellen. So das obige Beispiel drehen kann in so etwas wie

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" 
     ] 
    ] 
] 

Wie kann so etwas wie dies erreicht werden?

Dank

+0

ich in Ihrem Beispiel davon aus, dass 123456 sollte nicht Teil des neuen Elements sein? Nur um sicher zu gehen. Sie müssen idList durchlaufen, während Sie eine laufende Liste der berührten IDs behalten. Fügen Sie dieser Liste eine ID hinzu, wenn Sie sie zum ersten Mal sehen. Lassen Sie sie dann aus, wenn sie Teil Ihrer verfolgten Liste ist. – SArnab

Antwort

2

Verwenden Sie die folgende Vorgehensweise mit array_column (verfügbar seit PHP 5.5), array_merge und array_unique Funktionen:

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

Der Ausgang:

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