2016-02-11 3 views
0

я, кажется, имея немного ума пустым здесь,Найти разницу массива

У меня есть 2 массивы:

$network_keys= array(
    (int) 0 => '7 ADELAIDE', 
    (int) 1 => '7TWO ADELAIDE' 
); 

$dblist = array(
    (int) 0 => array(
     'PrpMedia' => array(
      'id' => (int) 3, 
      'network_key' => '7 ADELAIDE', 
      'media_id' => (int) 43 
     ), 
     'Media' => array(
      'id' => (int) 43, 
      'media_type_id' => (int) 5, 
      'media_location_id' => (int) 4, 
      'media_name' => 'Channel 7 ADELAIDE', 
      'deleted' => false 
     ) 
    ), 
    (int) 1 => array(
     'PrpMedia' => array(
      'id' => (int) 4, 
      'network_key' => 'VIC 1HD BENDIGO', 
      'media_id' => (int) 42 
     ), 
     'Media' => array(
      'id' => (int) 42, 
      'media_type_id' => (int) 5, 
      'media_location_id' => (int) 4, 
      'media_name' => '7MATE', 
      'deleted' => false 
     ) 
    ) 
) 

Я хочу найти какие значения от $ network_keys не существует в $ dbList.

Чтобы быть ясным, мы ищем в $ dblist [0] ['PrpMedia'] ['network_key'].

Спасибо, продвинутый!

Ожидаемый массив:

$difference = array('7TWO ADELAIDE');

+0

Значения '$ network_keys' не существуют в' $ sbList' –

+0

@ A-2-A Это, очевидно, образцы данных. Однако я обновлю его –

+1

, не давайте данные образца, это путает других. И также расскажите, что вы пробовали до сих пор. Код, который вы пробовали? –

ответ

2

Вы можете сделать это с помощью комбинации array_map и array_diff:

$diff = array_diff($network_keys, array_map(function($v) { 
    return $v['PrpMedia']['network_key']; 
}, $dblist)); 

В примере, вы даете, вы получите значение $ network_keys, потому что ни один из них не встречается в искомом массиве.

Код сначала извлекает все значения из ['PrpMedia']['network_key'] network_keys$ в массив, который будет иметь такую ​​же структуру, как и плоский dblist$. Тогда это просто принимает значение, сохраняя только элементы $ dblist, которые не встречаются в этом промежуточном массиве.

Следует иметь в виду, что этот код предполагает, что найденный ключ ['PrpMedia']['network_key'] существует во всех элементах $ network_keys. Если это не может считаться всегда, а затем добавить проверку, например:

$diff = array_diff($network_keys, array_map(function($v) { 
    return isset($v['PrpMedia']['network_key']) 
     ? $v['PrpMedia']['network_key'] 
     : null; 
}, $dblist)); 

Это также будет работать правильно, если ключ ['PrpMedia'] нет одного из элементов.

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