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.
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