다중 배열에서 배열 내 배열의 특정 원소가 동일할시에
중복값을 맨 앞의 배열만 남기고 없애는 함수 또는 방법이 있을까요??
예를 들면
$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
Policia
2019-11-22 (금) 14:41:01
$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함수입니다
$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 공부좀 해야겠네요 ㅠㅠㅠㅠ
진짜 너무너무 감사합니다 ㅠㅠ 채택 드리고 위에 질문은 재질문 드려야겠네요 ㅎㅎ
진짜 너무너무 감사합니다 ㅠㅠ 채택 드리고 위에 질문은 재질문 드려야겠네요 ㅎㅎ
2019-11-22 (금) 14:44:23
저도 답변다는중 지워졌었네요 ㅎㅎ
[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함수가 있었다니 하나 배웠습니다.!!
[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함수가 있었다니 하나 배웠습니다.!!
Policia
2019-11-22 (금) 14:47:05
해당질문도 답변드리자면
$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번)
$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문 돌려서 했었네요 ㅠㅠ
너무 감사합니다!!
array_splice 안에 $location 부분에 변수도 들어갈수가 있군요 ㅎㅎ
아까 찾다가 이해 못했던 부분인데 ㅠㅠ
괜히 어렵게 for문 돌려서 했었네요 ㅠㅠ
너무 감사합니다!!
답변을 작성하려면 로그인이 필요합니다.
다른 의견도 필요했는데 괜히 지웠네요 ㅠㅠ
혹시 여기다가도 달아주실수 있나요?? ㅠㅠ