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개
베르만님의 소스가 너무 깔끔하니 좋네요 내거 보다 베르만님꺼 보니 황홀하네요 : )
array_merge(current($a), current($b)); 처음 본 형식인데 배웠습니다
다른 방법으로 결과는 같이 나오길래 적어 봅니다
$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개
댓글을 작성하려면 로그인이 필요합니다.
댓글을 작성하려면 로그인이 필요합니다.
댓글을 작성하려면 로그인이 필요합니다.
답변에 대한 댓글 1개
댓글을 작성하려면 로그인이 필요합니다.
$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의 키값으로 사용했습니다.
원하시는 게 이게 맞나 모르겠네요.
댓글을 작성하려면 로그인이 필요합니다.
댓글을 작성하려면 로그인이 필요합니다.
댓글을 작성하려면 로그인이 필요합니다.
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인