I'm pretty sure this is right. If not, please update your question to include the expected output for your sample input. (Doing this anyway probably isn't a bad idea.)
Implementation:
// Set up things that don't change as constants.
define('P', 0.3);
define('N', 10509.74);
// O doesn't change, but it's only used once on
// its own. We'll reuse it to store the ongoing
// value of (O-D1), (O-D1-D2), etc.
$O = 30000;
$M = array(30, 31, 30);
$Y = array(360, 360, 360);
$S = array();
$D = array();
for ($i = 0; $i < count($M); $i++) {
$S[$i] = $O * P * $M[$i] / $Y[$i];
$D[$i] = N - $S[$i];
$O -= $D[$i];
}
print_r($S);
Output:
Array
(
[0] => 750
[1] => 522.87338333333
[2] => 256.33483458333
)
If you don't need the complete $D
array at the end of this you can cut it out entirely and just use $O -= N - $S[$i];
. It's not exactly clear from the question so I left it in.
Precision may be an issue, though the degree of precision needed was left out so I didn't bother tackling it at all.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…