다중배열 중복 제거 질문 드립니다 ㅠㅠ

다중배열 중복 제거 질문 드립니다 ㅠㅠ

QA

다중배열 중복 제거 질문 드립니다 ㅠㅠ

본문

다중 배열에서 배열 내 배열의 특정 원소가 동일할시에
중복값을 맨 앞의 배열만 남기고 없애는 함수 또는 방법이 있을까요??
예를 들면
$fruits = array(
  array("a" => '사과',"b" => 3),
  array("a" => '참외',"b" => 3),
  array("a" => '딸기',"b" => 12),
  array("a" => '딸기',"b" => 4),
  array("a" => '포도',"b" => 12),
  array("a" => '딸기',"b" => 7),
  array("a" => '메론',"b" => 3)
);

위 배열을 보면 'a' 의 '딸기' 중복값이 3개이고 'b' 값은 다르잖아요?
그럼 'a'의 값만 비교해서 맨 앞의 배열만 남기고

$fruits = array(
  array("a" => '사과',"b" => 3),
  array("a" => '참외',"b" => 3),
  array("a" => '딸기',"b" => 12),
  array("a" => '포도',"b" => 12),
  array("a" => '메론',"b" => 3)
);

이렇게 만드는 방법이 뭐가 있을까요? ㅠ

고수분들 답변 부탁드리겠습니다 ㅠ

이 질문에 댓글 쓰기 :

답변 1

아까 아이디가 기억나지않는데 b값이 10보다 클때 배열삽입 질문주신분아니십니까? ㅠㅠ 열심히 답변달고있었는데... 지워버리셔서..

아!!! 그건 for문 내에서 if문 적용해보니 해결해버려서요!!!
다른 의견도 필요했는데 괜히 지웠네요 ㅠㅠ
혹시 여기다가도 달아주실수 있나요?? ㅠㅠ

$fruits = array(array("a" => '사과',"b" => 3),array("a" => '참외',"b" => 3),array("a" => '딸기',"b" => 12),array("a" => '메론',"b" => 3));
$fruits1 = array(array("a" => '딸기',"b" => 3));
foreach($fruits as $fr){
    if($fr['b'] > 10){
        $location = array_search ($fr, $fruits);
        array_splice($fruits, $location, 0, $fruits1);
    }
}

설명다는건 날려버려서 힘드니... 핵심은 array_splice함수입니다

와우....... foreach 랑 array_splice 공부좀 해야겠네요 ㅠㅠㅠㅠ
진짜 너무너무 감사합니다 ㅠㅠ 채택 드리고 위에 질문은 재질문 드려야겠네요 ㅎㅎ

저도 답변다는중 지워졌었네요 ㅎㅎ


$fruits = array(
	array("a" => '사과',"b" => 3),
	array("a" => '참외',"b" => 3),
	array("a" => '딸기',"b" => 12),
	array("a" => '메론',"b" => 3)
);

$fruits1 = array(
	"a" => '딸기',
	"b" => 3
);

function insert_array($arr, $idx, $add){       
	$arr_front = array_slice($arr, 0, $idx);
	$arr_end = array_slice($arr, $idx);
	$arr_front[] = $add;
	return array_merge($arr_front, $arr_end);
}

foreach($fruits as $key => $val) {
	if ($fruits[$key]['b'] > 10) {
		$arr = insert_array($fruits, $key, $fruits1);
	}
}

print_r2($arr);


array_splice함수가 있었다니 하나 배웠습니다.!!

해당질문도 답변드리자면

$fruits = array(
    array("a" => '사과',"b" => 3),
    array("a" => '참외',"b" => 3),
    array("a" => '딸기',"b" => 12),
    array("a" => '딸기',"b" => 4),
    array("a" => '포도',"b" => 12),
    array("a" => '딸기',"b" => 7),
    array("a" => '메론',"b" => 3)
);
$ids = array_column($fruits, 'a');
$ids = array_unique($ids);
$fruits = array_filter($fruits, function ($key, $value) use ($ids) {
    return in_array($value, array_keys($ids));
}, ARRAY_FILTER_USE_BOTH);

이런식으로 가능합니다

이건 참고자료 https://cnpnote.tistory.com/entry/PHP%EC%97%90%EC%84%9C-%EB%8B%A4%EC%B0%A8%EC%9B%90-%EB%B0%B0%EC%97%B4%EC%97%90%EC%84%9C-%EC%A4%91%EB%B3%B5-%EA%B0%92%EC%9D%84-%EC%A0%9C%EA%B1%B0%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95
여길 참고하시면됩니다 (6번)

아 답변 달아주신거 바로 실행해보니 이해가 되네요!!
array_splice 안에 $location 부분에 변수도 들어갈수가 있군요 ㅎㅎ
아까 찾다가 이해 못했던 부분인데 ㅠㅠ
괜히 어렵게 for문 돌려서 했었네요 ㅠㅠ
너무 감사합니다!!

답변을 작성하시기 전에 로그인 해주세요.
전체 123,530 | RSS
QA 내용 검색

회원로그인

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