首页 > 解决方案 > 从总共 35 天 PHP 中获取每一天的不同值

问题描述

我正在尝试实现一种结果,在该结果中,我可以获得“每天”的不同值与“35天”的“总值”,然后我想将值保存在用户的列(ROI)中桌子:

目前我正在尝试实现这样的目标:

$total_days = 35;
$total_amount = 200;
$arr = array();

for($i = 0; $i < $total_days; ++$i)
{
    $arr[] = rand(0.0, 1000.0);
}

$actual_sum = array_sum($arr);

for($i = 0; $i < $total_days; ++$i)
{
    $arr[$i] *= $total_amount /$actual_sum;
    //echo $arr[$i]."<BR><BR>";
}

$sum = array_sum($arr);

//echo "Sum = ".$sum;

结果是:

*********************************************

5.2625698324022

4.9162011173184

0.27932960893855

5.9776536312849

9.7430167597765

and so on for the total 35 days

Sum = 200

**********************************************

这导致我将所有天的值放在一起,现在我需要做的是只获取一天的值,然后我将在表中插入该值,此代码将每天通过 cron 作业运行 35 天。

我的问题是如何在变量中只获取一个值,以便我可以将其保存在表中?

像这样:

$value_to_insert = 5.26 (the first generated value for first day of cron job running);

And there will be the same for 2nd day cron job ($value_to_insert should be = 4.91)

另外,如果有什么好主意,我如何管理所有天的值,那么如果 cron 将在第 35 天运行,则所有插入的值应该等于 $total_amount (200) ?

我的表结构是:

********************************
UserID (int)
UserName (varchar)
Email (varchar)
Earning (int)
LastROIEarning (int)
Date (timestamp)
********************************

标签: phpmathformuladivide

解决方案


您的问题的简单答案: 我的问题是如何在变量中只获取一个值,以便我可以将其保存在表中? 将是:只需用一个键引用 $arr,例如$arr[0]第一个值,$arr[1]第二个值等等......

但我相信这不是你的实际问题。它更多地是关于如何结合 cron-job 来实现这一点。

这是我想出的解决方案:

这是您的代码的当前示例输出:

array (size=35)
  0 => float 4.1004135360242
  1 => float 5.0905702137574
  2 => float 4.1819558506611
  3 => float 1.8754732366474
  4 => float 1.3512726425534
  5 => float 9.7035354417846
  6 => float 3.7509464732949
  7 => float 7.7581687925913
  8 => float 4.6013163259363
  9 => float 2.5394606558332
  10 => float 2.5627584600151
  11 => float 1.6774419011008
  12 => float 10.553905294426
  13 => float 10.938319063428
  14 => float 6.0923757935815
  15 => float 8.0610402469567
  16 => float 10.099598112878
  17 => float 9.7501310501485
  18 => float 2.3064826140136
  19 => float 10.495660783971
  20 => float 11.637253188887
  21 => float 2.9821189352903
  22 => float 8.3406138971402
  23 => float 10.099598112878
  24 => float 6.0457801852175
  25 => float 0.46595608363912
  26 => float 0.51255169200303
  27 => float 2.108451278467
  28 => float 1.7123886073738
  29 => float 6.2205137165822
  30 => float 7.5950841633176
  31 => float 10.949967965519
  32 => float 1.1765391111888
  33 => float 6.7563632127672
  34 => float 5.9059933601258

我会将所有这些值保存到一个空表 ( cronvalues) 中,其结构如下:

id   value                used
1    4.1004135360242      0
2    5.0905702137574      0
3    4.1819558506611      0
4    1.8754732366474      0 
etc (up to 35 rows)

这一代数据应该是你当前的 php 文件并被调用generate.php或类似。

每天调用的文件可能是cronday.php

cronday.php:

  1. 从表 cronvalues 中选择随机 ID

    SQL: SELECT id FROM cronvalues WHERE used = 0 ORDER BY RAND() LIMIT 1

    将价值存储在$result_id

  2. 更新现在使用的数据库中的值

    SQLUPDATE cronvalues SET used = 1 WHERE id={$result_id}

在上述这些步骤中,您可以使用 SQL 跟踪当前总和:

SELECT SUM() AS currentsum FROM cronvalues WHERE used = 1

以上是基于 cronjob 每天只执行一次的事实。如果你想做一个额外的控制,你可以在表中添加一个额外的列来验证当前日期。

我不确定这是否正是您的意思,但我希望它能给您一些解决问题的想法。


推荐阅读