2차원배열 중복 질문드립니다.

2차원배열 중복 질문드립니다.

QA

2차원배열 중복 질문드립니다.

본문

현재 2차원배열안에 중복값이 있어.  중복값의sum을 구하고싶습니다.

예를들어 현재 배열안에는

 

Array
(
    [0] => Array
        (
            [알사탕] => 1
        )

    [1] => Array
        (
            [호박사탕] => 1
        )

    [2] => Array
        (
            [껌] => 15
        )

    [3] => Array
        (
            [알사탕] => 2
        )

    [4] => Array
        (
            [껌] => 2
        )
)

요렇게 있을경우에 중복의 합을구해서

Array
(
    [0] => Array
        (
            [알사탕] => 3
        )

    [1] => Array
        (
            [호박사탕] => 1
        )

    [2] => Array
        (
            [껌] => 17
        )

  
)

요런식으로 나오게 할순없을까요?

for($j=0; $row2 = mysql_fetch_array($result2); $j++)
{

 $aaaa[$j][$row2[it_name]] = $row2[ct_qty]; //이렇게 값넣고있습니다.

}

 

이 질문에 댓글 쓰기 :

답변 2


$arr = [
    ["알사탕" => 1],
    ["호박사탕" => 1],
    ["껌" => 15],
    ["알사탕" => 2],
    ["껌" => 2]
];
array_walk_recursive($arr, function($item, $key) use (&$sum) {
    $sum[$key] = isset($sum[$key]) ? $item + $sum[$key] : $item;
});
print_r($sum);

왕계란 님,
혹시 배열이 아래와 같은 형태일 땐, 아래쪽 코드가 어떤 식으로 바뀌어야 하는지?

$arr = array(
    "알사탕" => 1,
    "호박사탕" => 1,
    "껌" => 15,
    "알사탕" => 2,
    "껌" => 2
);

답변감사드립니다.
하나만더 여쭙겠습니다.. 아래 sinbi님이 댓글로 적어주신부분은 키가 중복이되어 저렇게 배열이 생성이 안되면.
배열명 : $candy
print_r2($candy) 결과
(
    [0] => Array
        (
            [알사탕] => 13
        )

    [1] => Array
        (
            [껌] => 1
        )

    [2] => Array
        (
            [껌] => 2
        )

    [3] => Array
        (
            [알사탕] => 2
        )

    [4] => Array
        (
            [호박사탕] => 2
        )
)
요런식으로 나온다면,
각 사탕들의 합은 어찌구할수 있을까요.?


array_walk_recursive($candy, function($item, $key) use (&$sum) {
	$sum[$key] = isset($sum[$key]) ? $item + $sum[$key] : $item;
});

$result = [];
foreach($sum as $k => $v) {
	$result[] = [
		$k => $v
	];
}
print_r($result);

위에 질문을 보니 depth가 한 번 더 들어가길 원하시는군요.
이유는 모르겠지만 일단 합을 만든 후에 다시 돌려서 만들어야 하는 것 같네요.

$aaaa = array(
    0=>array('알사탕'=>1),
    1=>array('호박사탕'=>3),
    2=>array('껌'=>15),
    3=>array('알사탕'=>5),
);
$sum_qty_array = array();
foreach ($aaaa as $item){
   foreach ($item as $name=>$qty){
       if(!isset($sum_qty_array[$name])){
           $sum_qty_array[$name] = $qty;
       }else{
           $sum_qty_array[$name] += $qty;
       }
   }
}


$sum_qty_sort_array = array(); // 원하시는 결과는 이 배열에 담깁니다.

foreach ($sum_qty_array as $key=>$val){
    $sum_qty_sort_array[] = array($key=>$val);
}
print_r($sum_qty_sort_array);

 

의식의 흐름대로 코딩해봤어요.

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

회원로그인

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