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

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

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문 돌려서 했었네요 ㅠㅠ
너무 감사합니다!!

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

회원로그인

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