首页 > 解决方案 > PHP将缺少的工作日推入数组中,总数为0

问题描述

我需要为上周的每一天建立一个总销售额图表,我没有得到所有 7 天的数据,而是从数据库中获取 3 天的数据,我需要推动其余 4 天的总销售额为 0,

我有以下 3 天的数组

Array
(
    [0] => Array
        (
            [SalesDate] => Jun09
            [total] => 4
        )

    [1] => Array
        (
            [SalesDate] => Jun11
            [total] => 2
        )

    [2] => Array
        (
            [SalesDate] => Jun14
            [total] => 1
        )

)

但我需要像这样从 Jun09 到 Jun15 的所有 7 天数据

Array
(
    [0] => Array
        (
            [SalesDate] => Jun09
            [total] => 4
        )

    [1] => Array
        (
            [SalesDate] => Jun10
            [total] => 0
        )

    [2] => Array
        (
            [SalesDate] => Jun11
            [total] => 2
        )
    [3] => Array
        (
            [SalesDate] => Jun12
            [total] => 0
        )
    [4] => Array
        (
            [SalesDate] => Jun13
            [total] => 0
        )
    [5] => Array
        (
            [SalesDate] => Jun14
            [total] => 1
        )
    [6] => Array
        (
            [SalesDate] => Jun15
            [total] => 0
        )
   
)

我尝试过使用以下代码,但没有获得所需的数据。

<?php 
$sales =array(array('SalesDate' => 'Jun09',
                        'total' => 4
                        ),

                array
                    (
                       'SalesDate' => 'Jun11',
                        'total' => 2
                    ),
           
                array
                    (
                        'SalesDate' => 'Jun14',
                       'total' => 1
                    )
                );
$final_array = array();
foreach($sales as $sale)
            {
                for($i=7;$i>0;$i--)
                {
                    $current_weeks =[];
                    if($sale['SalesDate'] ==date('Md', strtotime("-".$i." days")))
                    {
                        $week_days['SalesDate'] = $sale['SalesDate'];
                        $week_days['total'] = $sale['total'];
                    }
                    else
                    {
                        $week_days['SalesDate'] = date('Md', strtotime("-".$i." days"));
                        $week_days['total'] = 0;
                       
                    }
                   $final_array[] =$week_days;
                }
               
                
            }

标签: phparrays

解决方案


您可以首先创建一个与您的源数组匹配的“骨架”数组$arr,但与之前的所有 7 天相匹配$prevSevenDays。日期格式与源数组匹配,总数均设置为0.

// build empty skeleton
$prevSevenDays = [];
for ($i = 7; $i > 0; $i--) {
    $prevSevenDays[$i]['SalesDate'] = date('Md', strtotime("-$i days"));
    $prevSevenDays[$i]['Total'] = 0;
}

您所要做的就是循环遍历这个数组,用源数组中的可用数据替换条目$arr

foreach ($arr as $sales) {
    foreach ($prevSevenDays as $key => $day) {
        if ($sales['SalesDate'] === $day['SalesDate']) $prevSevenDays[$key]['Total'] = $sales['Total'];
    }
}

演示


推荐阅读