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

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

QA

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

답변 1

본문

다중 배열에서 배열 내 배열의 특정 원소가 동일할시에
중복값을 맨 앞의 배열만 남기고 없애는 함수 또는 방법이 있을까요??
예를 들면
$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보다 클때 배열삽입 질문주신분아니십니까? ㅠㅠ 열심히 답변달고있었는데... 지워버리셔서..

$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함수입니다

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


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

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 98
© SIRSOFT
현재 페이지 제일 처음으로