채택완료

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

2019-11-22 (금) 14:34:48 3,713

다중 배열에서 배열 내 배열의 특정 원소가 동일할시에
중복값을 맨 앞의 배열만 남기고 없애는 함수 또는 방법이 있을까요??
예를 들면
$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개 / 댓글 6개

채택된 답변
+20 포인트

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

답변에 대한 댓글 6개

2019-11-22 (금) 14:39:11
아!!! 그건 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함수입니다
2019-11-22 (금) 14:42:54
와우....... foreach 랑 array_splice 공부좀 해야겠네요 ㅠㅠㅠㅠ
진짜 너무너무 감사합니다 ㅠㅠ 채택 드리고 위에 질문은 재질문 드려야겠네요 ㅎㅎ
저도 답변다는중 지워졌었네요 ㅎㅎ
[code]
$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);
[/code]

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번)
2019-11-22 (금) 14:47:54
아 답변 달아주신거 바로 실행해보니 이해가 되네요!!
array_splice 안에 $location 부분에 변수도 들어갈수가 있군요 ㅎㅎ
아까 찾다가 이해 못했던 부분인데 ㅠㅠ
괜히 어렵게 for문 돌려서 했었네요 ㅠㅠ
너무 감사합니다!!

답변을 작성하려면 로그인이 필요합니다.