【问题标题】:array_intersect different valuearray_intersect 不同的值
【发布时间】:2020-07-31 17:31:34
【问题描述】:

我使用array_intersect 比较两个数组

    $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'

【问题讨论】:

    标签: php arrays array-intersect


    【解决方案1】:

    您可以改用array_filter + in_array。这只会保留site_idtssr_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

    【讨论】:

    • 谢谢,我删除了: bool,因为我使用了php 5.6,我怎样才能让数组不通过?
    • 您的意思是,如何获取所有其他条目(不匹配的条目)?
    • 只需将in_array替换为!in_array即可(如果不想重复,可以将array_filter替换为循环和if/else)。跨度>
    猜你喜欢
    • 2021-10-31
    • 2010-09-20
    • 1970-01-01
    • 2011-07-31
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多