首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将结果平均分布在PHP的几天内

将结果平均分布在PHP的几天内
EN

Stack Overflow用户
提问于 2012-10-16 18:42:26
回答 1查看 183关注 0票数 0

我试图在任何时间内以非常具体的方式分散3个查询的结果。每个数组的每个结果代表一个电话呼叫,我希望每天总共打18个电话。

我每天总共需要18项结果,按以下各点分列:

代码语言:javascript
复制
8 $active_costco results
4 $inactive_costso results
3 $bashas results
3 $afs results

$active_costco returns 321 total results
$inactive_costco returns 119 total results 
$bashas returns 64 total results
$afs returns 47 results

我需要的结果总数是每天18,所以如果没有更多的$afs或$inactive_costco's,用$active_costcos.填入18。

下面是我目前使用的php (它只将active_costcos划分为每天8次)

代码语言:javascript
复制
        $active_costco = sql::results($query);

$inactive_costco = sql::results();

$bashas = sql::results("");

$afs = sql::results("");
$date = date('Y-m-d');
$str = 'INSERT pharmacy.dbo.hotlist (employee_id, store_id, follow_up_date, created_at, status, urgency)VALUES';
for ($i = 0; $i < count($active_costco); $i++)
{
    if ($i%8 == 0)
    {
        $date = date('Y-m-d', strtotime($date . '+1 Weekday'));
    }
    $str .= "('0CS',". $active_costco[$i]['id'] . ", '$date', '". date('Y-m-d H:m.s') . "', 1, 3)";
    $str .= ($i == count($active_costco)-1)? '': ',';
    $str .= '<br />';
}
echo $str;

任何帮助都将不胜感激。谢谢你,迈克

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-16 21:01:47

在这个问题上花了一段时间之后,下面是我想出的解决方案:

代码语言:javascript
复制
$str = 'INSERT pharmacy.dbo.hotlist (employee_id, store_id, follow_up_date, created_at, status, urgency)VALUES';
do 
{
    $date = date('Y-m-d', strtotime($date . " +1 Weekday"));
    $today = array();
    for ($i = 0; $i < 3; $i ++)
    {
        $basha = array_pop($bashas);
        $associated = array_pop($afs);
        if (!empty($basha))
            $today[] = $basha;
        if (!empty($associated))
            $today[] = $associated;
    }
    for ($i = 0; $i < 4; $i++)
    {
        $inactive = array_pop($inactive_costco);
        if (!empty($inactive))
            $today[] = $inactive;   
    }

    $count = 18 - count($today);
    for ($i = 0; $i < $count; $i++)
    {
        $active = array_pop($active_costco);
        if (!empty($active))
            $today[] = $active;
    }

    $calls_left = count($active_costco) + count($inactive_costco) + count($bashas) + count($afs);
    foreach ($today as $v)
    {
        echo "Store ID = " . $v['id'] . " Date = " . $date . "<br />";
    }
}while ($calls_left > 0);

它通过并弹出每个数组中的元素(指定的数字)。如果数组为空(没有什么可弹出),则不会添加任何内容。然后计算当前数组中的调用数,从18个中减去调用,并从$active_costsco获取其余的调用。

感谢所有投入的人。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12921359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档