doushi5752 2013-02-19 11:52
浏览 26
已采纳

如果它没有出现在另一个数组中,我想要我的数组中的值

How can i get the desired output? I want to check if array1 "entry_id" is not the same as array2 "entry_id"

How can i do that? I tried with array_diff_key .. But it did not work

Array1

Array ( [0] => Array ( [entry_id] => 53242 [site_id] => 2 [channel_id] => 2 [author_id] => 5 [1] => Array ( [entry_id] => 76435 [site_id] => 8 [channel_id] => 8 [author_id] => 9  

Array2

Array ( [0] => Array ( [entry_id] => 89764 [site_id] => 1 [channel_id] => 1 [author_id] => 5  [1] => Array ( [entry_id] => 53242[site_id] => 7 [channel_id] => 9 [author_id] => 1  

I would like to compare array1 and array2 with each other and get the desired output:

Desired output:

   Array ( [0] => Array ( [entry_id] => 76434 [site_id] => 8 [channel_id] => 8 [author_id] => 9 [1] => Array ( [entry_id] => 76435 [site_id] => 8 [channel_id] => 8 [author_id] => 9 
  • 写回答

2条回答 默认 最新

  • doushen1026 2013-02-19 12:00
    关注

    For smallish size of input arrays you can basically do it the long way using two for loops.

    Sample code (not tested!):

    // $array1 and $array2 are the inputs
    // $array3 is output
    $array3=array();
    // Keep track of what we have already found
    $buff=array();
    foreach($array1 as $a1){
        foreach($array2 as $a2){
            // Check for matching ids and is not already used
            if($a1['entry_id']==$a2['entry_id'] and !isset($buff[$a1['entry_id']])){
                $array3[]=$a1;
                $buff[$a1['entry_id']]=1;
            }
        }
    }
    
    print_r($array3); // Debug
    

    EDIT: OP wanted the opposite, so...

    Sample code (tested!):

    // 2 pass filter
    // $array1 and $array2 are the inputs
    $array1=array(
        array('entry_id'=>1,'t'=>"a1"),
        array('entry_id'=>2,'t'=>"b1"),
        array('entry_id'=>3,'t'=>"c1"),
    );
    $array2=array(
        array('entry_id'=>1,'t'=>"a2"),
        array('entry_id'=>2,'t'=>"b2"),
        array('entry_id'=>4,'t'=>"d2"),
    );
    
    // $array3 is output
    $array3=array();
    // Keep track of what we have already found
    $buff=array();
    
    foreach($array1 as $a1) $buff[$a1['entry_id']]=array(1,$a1);
    
    foreach($array2 as $a2){
        if(isset($buff[$a2['entry_id']])){
                $buff[$a2['entry_id']]=array(2,$a2);
        }else{
                $buff[$a2['entry_id']]=array(1,$a2);
        }
    }
    
    foreach($buff as $k=>$v) if($v[0]==1) $array3[]=$v[1];
    
    print_r($array3); // Debug
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题