2017-05-05 11 views
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>"; 

?> 

을하고 그것을 잘 작동하지만 중첩 foreachif 조건이 좀 지저분하다 생각합니다. 저는 다차원, 연관 배열로 작업하고 있는데, 키가 많은 아주 큰 배열입니다. 그래서 같은 결과를 얻는 더 좋은 대안이 있는지 궁금합니다.

답변

0

날이 당신을 위해 옵션이 있는지 확인하기 위해,하지만 약간의 예에서 나는이에 배열 선언 바꿀 것 정말 충분하지 맥락있다 :

$array_base_prices = array(
    1 => 10, 
    2 => 2, 
    3 => 30, 
    4 => 40 
); 

$array_promo = array(
    1 => 20, 
    2 => 5, 
    3 => 2 
); 

을 또는 당신이 필요로하는 경우 배열을 사용 가격보다 더 많은 데이터를 저장할 수 있습니다 :

$array_base_prices = array(
    1 => array("price" => 10, "something_else" => null) 
); 

포인트는 부모 배열의 인덱스로 ID를가집니다. 그런 다음 중첩 루프가 다음으로 바뀝니다.

foreach ($array_base_prices as $id => $base_price) { 
    $base_prices_with_promo[$id] = $base_price; 
    if (isset($array_promo[$id]) && $base_price > $array_promo[$id]) { 
     $base_prices_with_promo[$id] = $array_promo[$id]; 
    } 
} 
+0

답변 해 주셔서 감사합니다. 이러한 배열이 통과 배열 인 것을 고려하면 제안 된대로 구조를 수정하는 것이 훨씬 더 실용적이라고 생각합니다. 즉, id를 부모 배열의 키로 지정하는 것입니다. 다음 단락에서 필요한 수량을 더 잘 관리하려면 id를 하위 배열 요소로 설정하십시오. $ array_base_prices = array ( 1 => array ("id"=> 1, "price"= > 10, "something_else"=> null) 등 ); – user1441917