2017-05-05 2 views
0

Ich muss eine Reihe von Preisen erstellen. So habe ich eine Reihe von Grundpreisen und eine Reihe von Aktionspreisen, wenn der Aktionspreis niedriger als der Grundpreis ist, lege ich es in die neue Reihe von Preisen. Zu diesem Zweck habe ich diesen Code:ersetzen Sie die Elemente eines Arrays coditional

<?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>"; 

?> 

und es funktioniert gut, aber ich denke, dass die if Bedingungen in den verschachtelten foreach ein wenig chaotisch sind. Ich arbeite mit mehrdimensionalen, assoziativen Arrays, sehr groß mit vielen Schlüsseln. Ich frage mich, ob es eine bessere Alternative gibt, um dasselbe Ergebnis zu erzielen.

Antwort

0

Es gibt wirklich nicht genug Kontext für mich sicher sein, dass dies eine Option für Sie, aber von Ihrem kleinen Beispiel würde ich die Array-Deklaration dazu ändern:

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

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

Oder ein Array verwenden, wenn Sie brauchen um mehr Daten als nur Preis zu speichern:

Der Punkt ist, die ID als Index des Elternarrays zu haben. Dann werden Ihre verschachtelten Loops zu diesem:

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

Danke für die Antwort. Wenn man bedenkt, dass diese Arrays Passage-Arrays sind, denke ich, dass es viel praktischer ist, die Struktur wie vorgeschlagen zu modifizieren, dh die ID als Schlüssel des übergeordneten Arrays zu setzen. Zum besseren Verständnis der Mengen verwalte ich in den folgenden Passagen brauchen, werde ich setzen auch die ID als Unterfeldelement: $ array_base_prices = array ( 1 => Array ("id" => 1, "Preis" = > 10, "something_else" => null), usw. ); – user1441917

Verwandte Themen