0
가격 배열을 만들어야합니다. 따라서 기본 가격과 다양한 프로모션 가격이 제공됩니다. 프로모션 가격이 기본 가격보다 낮 으면 가격 배열을 새로 지정합니다. 이를 위해이 코드 작성 :배열의 요소를 코드로 대체하십시오.
<?php
$array_base_prices = array(
array('id'=>1, 'price'=>10),
array('id'=>2, 'price'=>2),
array('id'=>3, 'price'=>30),
array('id'=>4, 'price'=>40)
);
$array_promo = array(
array('id'=>1, 'price'=>20),
array('id'=>2, 'price'=>5),
array('id'=>3, 'price'=>2)
);
$base_prices_with_promo = array();
foreach ($array_base_prices as $j => $u) {
foreach ($array_promo as $k => $v) {
if (($v['id'] == $u['id']) && $u['price'] < $v['price']) {
$base_prices_with_promo[$j]['id'] = $array_base_prices[$j]['id'];
$base_prices_with_promo[$j]['price'] = $array_base_prices[$j]['price'];
}
if (($v['id'] == $u['id']) && $u['price'] > $v['price']) {
$base_prices_with_promo[$j]['id'] = $array_promo[$k]['id'];
$base_prices_with_promo[$j]['price'] = $array_promo[$k]['price'];
}
}
}
$base_prices_with_promo = array_replace($array_base_prices, $base_prices_with_promo);
echo "<pre>";
print_r($base_prices_with_promo);
echo "</pre>";
?>
을하고 그것을 잘 작동하지만 중첩 foreach
에 if
조건이 좀 지저분하다 생각합니다. 저는 다차원, 연관 배열로 작업하고 있는데, 키가 많은 아주 큰 배열입니다. 그래서 같은 결과를 얻는 더 좋은 대안이 있는지 궁금합니다.
답변 해 주셔서 감사합니다. 이러한 배열이 통과 배열 인 것을 고려하면 제안 된대로 구조를 수정하는 것이 훨씬 더 실용적이라고 생각합니다. 즉, id를 부모 배열의 키로 지정하는 것입니다. 다음 단락에서 필요한 수량을 더 잘 관리하려면 id를 하위 배열 요소로 설정하십시오. $ array_base_prices = array ( 1 => array ("id"=> 1, "price"= > 10, "something_else"=> null) 등 ); – user1441917