array_intersect другое значение - PullRequest
0 голосов
/ 18 апреля 2020

я использую array_intersect для сравнения 2 массивов

    $myArray = array(
      array(
        'site_id'  => 'S6407', 
        'tssr_id'  => 'TSSRBOQ-200204-0145-59'
      ),
      array(
        'site_id'  => 'S5910', 
        'tssr_id'  => 'TSSRBOQ-200204-0145-8'
      ),
    );

    // $items_tssr is get from another variable
    foreach ($items_tssr as $key => $value) {
      $array_validate[] = array(
        'site_id' => $value['site_id'],
        'tssr_id' => $value['no_tssr_boq_site']
      );
    }

    $result = array_map('unserialize',
              array_intersect(
                  array_map('serialize', $myArray), array_map('serialize', $array_validate)));
    // if there are same 
    if(array_key_exists(0,$result)){
      echo 'process this';
    }else{
      echo 'dont process this';
    }

моя проблема , исходный $ myArray больше, чем 'site_id' и 'tssr_id'

$myArray_origin = array(
          'site_id' => 'S6407',
          'tssr_id'  => 'TSSRBOQ-200204-0145-59'
          'site_name' => 'Site S6407',
          'id_site_doc'=> '127361,
          'implementation_id' => 'imp4121',
          'status' => "implementation_created",
          "endstate" => false
   ),
...

как мне обработать $ myArray_origin, не выбрасывая несколько значений? потому что $ array_validate имеет только 2 значения 'site_id' и 'tssr_id'

1 Ответ

3 голосов
/ 18 апреля 2020

Вместо этого вы можете использовать array_filter + in_array. При этом сохраняются только те записи, чьи site_id и tssr_id присутствуют в одной из собственных записей array_validate:

$result = array_filter($myArray, function (array $entry) use ($array_validate): bool {
  return in_array([
    'site_id' => $entry['site_id'], 
    'tssr_id' => $entry['tssr_id']
  ], $array_validate, true);
});

Демо: https://3v4l.org/4Qhmr

...