2026, 새로운 도약을 시작합니다.

php 배열 합치기 채택완료

$cat를 기반으로 $a와 $b를 합쳐서 $c와 같은 형태의 데이터를 도출하고 싶습니다.

이리저리 해봐도 잘 안되서 질문 올립니다.

고수 님들의 도움이 절실하게 필요합니다.

$cat = ['아보카도', '레몬',  '그린키위', '파인애플'];

$a = array(array('brand_name' => '레몬', 'quantity' => 100, 'sum' => 1000), array('brand_name' => '아보카도', 'quantity' => 200, 'sum' => 2000));

$b = array(array('brand_name' => '레몬', 'quantity1' => 50, 'sum1' => 100), array('brand_name' => '파인애플', 'quantity1' => 100, 'sum1' => 3000));


 

$c = [

  [

    'brand_name' => '아보카도',

    'quantity' => 200,

    'sum' => 2000,

    'quantity1' => 0, //$b에 데이터가 없으므로

    'sum1' => 0 //$b에 데이터가 없으므로

  ],

  [

    'brand_name' => '레몬',

    'quantity' => 100,

    'sum' => 1000,

    'quantity1' => 50, //$b에 데이터가 있으므로

    'sum1' => 1000 //$b에 데이터가 있으므로

  ],

  [

    'brand_name' => '그린키위',

    'quantity' => 0, //$a에 데이터가 없으므로

    'sum' => 0, //$a에 데이터가 없으므로

    'quantity1' => 0, //$b에 데이터가 없으므로

    'sum1' => 0 //$b에 데이터가 없으므로

  ],

  [

    'brand_name' => '파인애플',

    'quantity' => 0, //$a에 데이터가 없으므로

    'sum' => 0, //$a에 데이터가 없으므로

    'quantity1' => 100, //$b에 데이터가 있으므로

    'sum1' => 3000 //$b에 데이터가 있으므로

  ]

];

답변 8개

채택된 답변
+20 포인트

베르만님의 소스가 너무 깔끔하니 좋네요  내거 보다 베르만님꺼 보니 황홀하네요 : )

array_merge(current($a), current($b));   처음 본 형식인데 배웠습니다

다른 방법으로 결과는 같이 나오길래  적어 봅니다

Copy


$cat = ['아보카도', '레몬',  '그린키위', '파인애플'];

$a1 = array(

        array('brand_name' => '레몬',    'quantity' => 100, 'sum' => 1000, 'quantity1' => 0,   'sum1' => 0), 

        array('brand_name' => '아보카도',  'quantity' => 200, 'sum' => 2000, 'quantity1' => 0,   'sum1' => 0)

);

$b1 = array(

        array('brand_name' => '레몬', 'quantity' => 0,   'sum' => 0,    'quantity1' => 50,   'sum1' => 100), 

        array('brand_name' => '파인애플', 'quantity' => 0,   'sum' => 0,  'quantity1' => 100, 'sum1' => 3000)

);

 

 

$a = array(); // 브랜드 네임만 담아 루프중 레몬처럼 중복된 값인지 아는 용도로

$b = array(); // 루프를 돌면서 배열을 담는다

$c = array_merge($a1,$b1);

for($i=0; $i $c[$i]['brand_name'],

            'quantity'   => !empty($c[$i]['quantity'])  ? $c[$i]['quantity']  : 0,

            'sum'        => !empty($c[$i]['sum'])       ? $c[$i]['sum']       : 0,

            'quantity1'  => !empty($c[$i]['quantity1']) ? $c[$i]['quantity1'] : 0,

            'sum1'       => !empty($c[$i]['sum1'])      ? $c[$i]['sum1']      : 0,

        );

        $a[] = $c[$i]['brand_name'];

        $b[] = $ary; 

    }

    else{

       // 현재 루프중인 중복 레몬값 즉 3번째 레몬값일 때 레몬의 배열값을 변경한다

        $_quantity  = ($c[0]['quantity']) ? $c[0]['quantity']  : $c[$i]['quantity'];

        $_sum       = ($c[0]['sum'])      ? $c[0]['sum']       : $c[$i]['sum'];

        $_quantity1 = ($c[0]['quantity1'])? $c[0]['quantity1'] : $c[$i]['quantity1'];

        $_sum1      = ($c[0]['sum1'])     ? $c[0]['sum1']      : $c[$i]['sum1'];

        $ary = array(

            'brand_name' => $c[$i]['brand_name'],

            'quantity'   => $_quantity ,

            'sum'        => $_sum,

            'quantity1'  => $_quantity1,

            'sum1'       => $_sum1,

        ); 

        $b[0] = $ary;

    }

}

$z = array(); // $cat배열 순서에 맞게 재 조립

for($i=0; $i 0, 

            'sum'        => 0, 

            'quantity1'  => 0, 

            'sum1'       => 0, 

        ); 

        $z[$i] = $_ary; 

    }

}

echo"";

print_r($z);

echo"";

/*

 Array

(

    [0] => Array

        (

            [brand_name] => 아보카도

            [quantity] => 200

            [sum] => 2000

            [quantity1] => 0

            [sum1] => 0

        )

    [1] => Array

        (

            [brand_name] => 레몬

            [quantity] => 100

            [sum] => 1000

            [quantity1] => 50

            [sum1] => 100

        )

    [2] => Array

        (

            [brand_name] => 그린키위

            [quantity] => 0

            [sum] => 0

            [quantity1] => 0

            [sum1] => 0

        )

    [3] => Array

        (

            [brand_name] => 파인애플

            [quantity] => 0

            [sum] => 0

            [quantity1] => 100

            [sum1] => 3000

        )

)

*/

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

답변에 대한 댓글 1개

저랑 비슷한 방법으로 개발하네요 ㅋㅋ

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

중복 foreach 로 자체 해결했습니다 ㅎㅎ 답변과 관심 감사합니다

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

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

답은 위에 있지만 퀴즈 같아서 답변 달아봅니다 ^^

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

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

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

답변에 대한 댓글 1개

와... 우!! 저걸 한방에 해결 하셨군요 ㅋㅋ

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

Copy


$array = array_merge($a,$b);

$tmp_array = array();

foreach($array as $key=>$val) {

    $tmp_array[$val['brand_name']]['quantity']  = $tmp_array[$val['brand_name']]['quantity'] + $val['quantity'];

    $tmp_array[$val['brand_name']]['quantity1'] = $tmp_array[$val['brand_name']]['quantity1'] + $val['quantity1'];

    $tmp_array[$val['brand_name']]['sum']       = $tmp_array[$val['brand_name']]['sum']  + $val['sum'];

    $tmp_array[$val['brand_name']]['sum1']      = $tmp_array[$val['brand_name']]['sum1'] + $val['sum1'];

}

$c = array();

foreach($cat as $key=>$val) {

    if(isset($tmp_array[$val])) {

        $c[$val] = $tmp_array[$val];

    } else {

        $c[$val]['quantity']  = 0;

        $c[$val]['quantity1'] = 0;

        $c[$val]['sum']       = 0;

        $c[$val]['sum1']      = 0;

    }

}

echo '';

print_r($c);

echo '';

brand_name 배열 c의 키값으로 사용했습니다.

원하시는 게 이게 맞나 모르겠네요.

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

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

foreach로 푼다음에 in_array나 array_search로 해야될거에요 

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

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

array_merge 등 여러가지 해 봤는데 원하는 대로 안되는 것 같아요

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

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

array_merge 함수로는 안되나요?

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

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

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

로그인
🐛 버그신고