2016-05-24 2 views
2

У меня есть два массива, из которых я хочу извлечь совпадения и вернуть их. Первый массив - это мой массив запросов, второй - это сортировка базы данных, если вы хотите это назвать. Имея это в виду, будучи ржавым, как я с PHP, я пытаюсь понять, как я могу перебирать их с меньшими накладными расходами, насколько это возможно, возвращая только уникальные совпадения всех объектов со второго. Есть ли чистый способ сделать это с помощью php? Если да, то кто-нибудь может помочь мне указать мне в общем направлении.сравнить многомерный массив с многомерным массивом объектов

Первое:

[ 
    ["something", "domain.com"], 
    ["something1", "sub.domain.com"] 
] 

Второе:

[ 
{ 
    "id": "abcde12345", 
    "name": "Company Name", 
    "corp_name": [ 
    "Company, Inc.", 
    "Company Inc." 
    ], 
    "_names": [], 
    "_products": [], 
    "urls": [ 
     "www.domain.com", 
     "domain.com", 
     "sub.domain.com" 
    ] 
}, 
{ 
    "id": "abcde12345", 
    "name": "Company Name", 
    "corp_name": [ 
    "Company, Inc.", 
    "Company Inc." 
    ], 
    "_names": [], 
    "_products": [], 
    "urls": [ 
     "www.domain.com", 
     "domain.com", 
     "sub.domain.com" 
    ] 
}. 
{ 
    "id": "abcde12345", 
    "name": "Company Name", 
    "corp_name": [ 
    "Company, Inc.", 
    "Company Inc." 
    ], 
    "_names": [], 
    "_products": [], 
    "urls": [ 
     "www.domain.com", 
     "domain.com", 
     "sub.domain.com" 
    ] 
} 
] 

ответ

1

Вот функция для сравнения массивы

http://php.net/manual/en/function.array-diff-assoc.php

в комм то есть рекурсивная версия. Я позволил себе вставить копию здесь.

<?php 
function array_diff_assoc_recursive($array1, $array2) { 
    $difference=array(); 
    foreach($array1 as $key => $value) { 
     if(is_array($value)) { 
      if(!isset($array2[$key]) || !is_array($array2[$key])) { 
       $difference[$key] = $value; 
      } else { 
       $new_diff = array_diff_assoc_recursive($value, $array2[$key]); 
       if(!empty($new_diff)) 
        $difference[$key] = $new_diff; 
      } 
     } else if(!array_key_exists($key,$array2) || $array2[$key] !== $value) { 
      $difference[$key] = $value; 
     } 
    } 
    return $difference; 
} 
?> 
+0

примечание: объекты JSON сопоставляются массивам в PHP. Чтобы использовать эту функцию, используйте json_decode ($ json, true), чтобы получить массив вместо StdClass – Richard

Смежные вопросы