сравнение двух массивов в PHP

У меня есть массив в PHP $array, который содержит такие элементы, как

$array['id'].. $array['name'] $array['class']

У меня есть другой массив с именем $array1, в котором есть только элемент $array1['uid']. Я хочу сопоставить эти два массива на основе $array['id'] and $array['uid'], чтобы получить элементы $array['id'] не равные $array['uid']` Есть ли встроенная функция в PHP, я могу сделать это в для каждого цикла с моей пользовательской функцией, но есть ли какая-нибудь функция?

Ввод: если $array имеет id=2,4,5,6, а $array имеет uid=2,4, тогда я должен получить $array id=5,6

Данные в массиве $ выглядят так

{
      "name": "abc", 
      "id": "37402526"
    }, 
    {
      "name": "def", 
      "id": "506768590"
    }, 
    {
      "name": "hij", 
      "id": "526405977"
   }

И $массив 1 вот так

{

      "id": "37402526"
    }, 
    {

      "id": "506768590"
    }, 
    {
      "
      "id": "526405977"
   }

person Community    schedule 23.01.2014    source источник
comment
Является ли ваш массив многомерным? Можете ли вы опубликовать <pre> отформатированный print_r() вывод указанного массива? (и ожидаемый результат тоже)   -  person Amal Murali    schedule 23.01.2014
comment
in_array($массив[id], $массив1); вернуть true, если какие-либо совпадения.   -  person Florin    schedule 23.01.2014
comment
@AmalMurali Я отредактировал вопрос .. оба одномерные   -  person    schedule 23.01.2014
comment
@user1765876: user1765876: До сих пор не ясно, как выглядит массив. Вы не можете опубликовать вывод print_r($array)?   -  person Amal Murali    schedule 23.01.2014
comment
@AmalMurali, пожалуйста, посмотри   -  person    schedule 23.01.2014
comment
возможный дубликат сравнения двух массивов в php   -  person JasonMArcher    schedule 25.01.2014


Ответы (2)


Если вы можете переписать свой код, чтобы идентификаторы были в ключах массива, вы могли бы использовать array_diff_key():

$array = array(
    '12' => array('name' => 'abc'),
    '34' => array('name' => 'def')
);

$array2 = array('12' => true);

$result = array_diff_key($array, $array2);

В противном случае вы можете использовать array_udiff():

function my_id_cmp($a, $b) {
    return strcmp($a['id'], $b['id']);
}

$result = array_udiff($array, $array1, 'my_id_cmp');
person tzunghaor    schedule 23.01.2014

Если ваш ввод находится в формате, который вы использовали в качестве примера, то это просто:

$array['id'] = implode(',', array_diff(explode(',', $array['id']), explode(',', $array1['uid'])));

С уважением.

person php-dev    schedule 23.01.2014
comment
Я теряю данные в массиве $, так как он многомерный - person ; 23.01.2014
comment
Этот фрагмент кода влияет только на ключ «id», поэтому данные не теряются, как вы говорите. Странный! - person php-dev; 23.01.2014