PHP로 합집합, 교집합, 여집합 구하기 > 개발자팁

개발자팁

개발과 관련된 유용한 정보를 공유하세요.
질문은 QA에서 해주시기 바랍니다.

PHP로 합집합, 교집합, 여집합 구하기 정보

PHP PHP로 합집합, 교집합, 여집합 구하기

본문

집합처리는 데이타 처리시 빈번히 알고리즘 중에 하나입니다.

QnA에 답변한 내용이 아까워서 공유합니다.

 

만약 $a = "1,2,3"이있고

$b = "2,3,4" 가 있다면

 

2와 3을 제거하고 1,4만 남게 하려면 어떻게 해야할까요?

 

배열 $a, $b 의 여집합을 구하는 문제입니다. 

php함수중에

array_diff 는 차집합

array_intersect 는 교집합 입니다.

php에 여집합 함수는 없습니다.  집합 연산을 통해서 구할수 있습니다.

A, B의 여집합은 (A - B) + (B - A) 입니다.(아마도 맞을겁니다.)

 



$arr_a = explode(",", $a);
$arr_b = explode(",", $c);
 
//여집합 
$arr_c = array_merge(
            array_diff($arr_a, $arr_b),         // 1
            array_diff($arr_b, $arr_a)          //4
        );                              
 //  $arr_c = 1  4
 
echo implode(",", $arr_c);
//result = 1,4
 
//교집합은
$arr_d = array_intersect($arr_a, $arr_b);  //2, 3
 
//합집합은
$arr_e = array_merge(
            array_intersect($arr_a, $arr_b),   //2, 3
            array_diff($arr_a, $arr_b),         // 1
            array_diff($arr_b, $arr_a)          //4
        );   //2, 3, 1, 4 

  

 

 

 

추천
3

댓글 5개

명랑폐인 님 덕분에 항상 많이 배우고 있네요~
파이썬으로 한 번 작성해보았습니다 ^^

파이썬은 수학함수가 많이 준비되어 있는 언어니까,,, 이미 있을거 같네요. (numpy에 있는것 같음)
위의 방법도 직관적입니다.
앗 위 댓글에서 '차집합'이 아니라 '여집합'인데 제가 잘못 적었네요.

파이썬에 수학이나 문자열 조작과 관련된 함수 또는 메서드가 많은 것 같아요~
set 자료형에 대해서 교집합을 위한 .intersection() 메서드, 합집합을 위한 .union() 메서드, 차집합을 위한 .difference() 메서드가 존재합니다.
말씀하신 numpy는 제가 사용빈도가 낮아서 관련된 함수로서 어떤 것이 있는지 잘 모르겠네요 ㅠㅠ

그럼 편안한 밤 되시고 안녕히 주무세요!
전체 5,352
개발자팁 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT