테스트 사이트 - 개발 중인 베타 버전입니다

2차원배열 중복 질문드립니다. 채택완료

mmkk2 6년 전 조회 7,468

현재 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개

채택된 답변
+20 포인트

</p>

<p>$arr = [

    ["알사탕" => 1],

    ["호박사탕" => 1],

    ["껌" => 15],

    ["알사탕" => 2],

    ["껌" => 2]

];</p>

<p>array_walk_recursive($arr, function($item, $key) use (&$sum) {

    $sum[$key] = isset($sum[$key]) ? $item + $sum[$key] : $item;

});

print_r($sum);</p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 8개

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

$arr = array(
"알사탕" => 1,
"호박사탕" => 1,
"껌" => 15,
"알사탕" => 2,
"껌" => 2
);
왕계란
6년 전
key가 같아서 그냥 엎어질 텐데 그런 배열이 생성될 수가 있나요?
m
mmkk2
6년 전
답변감사드립니다.
하나만더 여쭙겠습니다.. 아래 sinbi님이 댓글로 적어주신부분은 키가 중복이되어 저렇게 배열이 생성이 안되면.
배열명 : $candy
print_r2($candy) 결과
(
[0] => Array
(
[알사탕] => 13
)

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

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

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

[4] => Array
(
[호박사탕] => 2
)
)
요런식으로 나온다면,
각 사탕들의 합은 어찌구할수 있을까요.?
s
sinbi
6년 전
아,,,이런 형태는 안 되는 거군요.ㅎ
찍어보니, 나중 정의된 것만 나오네요.
아무튼,
array() 함수 형태로 정의된 경우 계산 방법이 궁금합니다.
왕계란
6년 전
[code]
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);
[/code]
위에 질문을 보니 depth가 한 번 더 들어가길 원하시는군요.
이유는 모르겠지만 일단 합을 만든 후에 다시 돌려서 만들어야 하는 것 같네요.
왕계란
6년 전
// sinbi
보통 배열 덧셈은 array_sum()으로 합니다.
$arr = [2, 3, 2, 5, 4];
echo array_sum($arr);
s
sinbi
6년 전
덕분에 공부가 많이 되었습니다.
( ^ ________ ^ ) ====b
유보
6년 전
감사합니다.
저도 덕 분에 많은 도움이 되었습니다!

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

세크티
6년 전
$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);

 

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

로그인 후 평가할 수 있습니다

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

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

로그인