PHP merge two arrays on the same key AND value

后端 未结 5 1314
误落风尘
误落风尘 2021-01-13 10:27

I have two arrays. And I want to merge them on the same key AND value. If they have the same ur_user_id then they are merged. array2 only provides

5条回答
  •  不思量自难忘°
    2021-01-13 11:02

    Try this:

     1,'ur_fname'=>'PerA','ur_lname'=>'SonA'),
            array('ur_user_id'=> 2,'ur_fname'=>'PerB','ur_lname'=>'SonB'),
            array('ur_user_id'=> 3,'ur_fname'=>'PerC','ur_lname'=>'SonC'),
        );
    $array2 = 
        array(
            array('ur_user_id' => 5,'ur_code' => 'EE','ur_user_role' => 'testE'),
            array('ur_user_id' => 4,'ur_code' => 'DD','ur_user_role' => 'testD'),
            array('ur_user_id' => 6,'ur_code' => 'FF','ur_user_role' => 'testF'),
            array('ur_user_id' => 3,'ur_code' => 'CC','ur_user_role' => 'testC'),
            array('ur_user_id' => 1,'ur_code' => 'AA','ur_user_role' => 'testA'),
            array('ur_user_id' => 2,'ur_code' => 'BB','ur_user_role' => 'testB'),
        );
    
    
    $result = array();
    
    $userIdsFromArray1 = array_column($array1, 'ur_user_id');
    
    
    foreach($array2 as $subarray)
    {
        if(in_array($subarray['ur_user_id'], $userIdsFromArray1))
        {
            $result[] = array_merge($subarray, getDataFromArray1ByUserId($array1, $subarray['ur_user_id']));
        }
    }
    
    
    function getDataFromArray1ByUserId($array1, $userId)
    {
        foreach($array1 as $key => $data)
        {
            if($data['ur_user_id'] == $userId)
                return $data;
        }
    
        return array();
    }
    
     usort($result,function($a,$b){
        return strnatcmp($a['ur_user_id'],$b['ur_user_id']);
    });
    
    print_r($result);
    

    Working example : CLICK!

提交回复
热议问题