第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PHP填充數(shù)組空洞

PHP填充數(shù)組空洞

PHP
慕勒3428872 2021-11-13 16:51:30
我有一個數(shù)組,其中包含每年、每周存儲的值,這些值來自我的數(shù)據(jù)庫。結果可能如下所示:Array(    [2018] => Array        (            [40] => 1            [41] => 1            [47] => 1            [48] => 1            [52] => 1        )    [2019] => Array        (            [1] => 1            [2] => 1            [3] => 1            [4] => 1        ))orArray(    [2018] => Array        (            [48] => 1            [49] => 1        )    [2019] => Array        (            [3] => 1            [4] => 1        ))如您所見,有幾周沒有數(shù)據(jù)。我想填滿數(shù)組,所以所有星期都在那里。以最后一個數(shù)組作為演示,期望的結果是:Array(    [2018] => Array        (            [40] => 1            [41] => 1            [42] => 0 < added            [43] => 0 < added            [44] => 0 < added            [45] => 0 < added            [46] => 0 < added            [47] => 1            [48] => 1            [49] => 0 < added            [50] => 0 < added            [51] => 0 < added            [52] => 1        )    [2019] => Array        (            [1] => 1            [2] => 1            [3] => 1            [4] => 1        ))Array(    [2018] => Array        (            [48] => 1            [49] => 1            [50] => 0 < added            [51] => 0 < added            [52] => 0 < added        )    [2019] => Array        (            [1] => 1            [2] =>             [3] => 1            [4] => 1        ))所以,數(shù)組應該:填補兩個(不連續(xù))數(shù)字之間的空洞如果有下一年,則填充年份數(shù)組直到結束如果有上一年且第一周沒有數(shù)據(jù),則填寫新一年的第一周我怎樣才能做到這一點?
查看完整描述

2 回答

?
ABOUTYOU

TA貢獻1812條經(jīng)驗 獲得超5個贊

我認為最有效的方法是使用聯(lián)合運算符。這應該這樣做:


  <?php

    $data = array(

        "2018"=> array(

            "40" => 1,

            "41" => 1,

            "47" => 1,

            "48" => 1,

            "52" => 1

        ),

        "2019"=> array(

            "1" => 1,

            "2" => 1,

            "6" => 1,

            "7" => 1      

        )

    );


    foreach($data as $year=>$array){

        $keys = array_keys($array);

        $min = min($keys); $max = 52;

        if(!isset($data[$year+1])){

            $max = max($keys);

        }

        $data[$year] = $data[$year] + array_fill($min,$max-$min+1, 0);

        ksort($data[$year]);

    }

    print_r($data);

  ?>

輸出:


Array

(

    [2018] => Array

        (

            [40] => 1

            [41] => 1

            [42] => 0

            [43] => 0

            [44] => 0

            [45] => 0

            [46] => 0

            [47] => 1

            [48] => 1

            [49] => 0

            [50] => 0

            [51] => 0

            [52] => 1

        )


    [2019] => Array

        (

            [1] => 1

            [2] => 1

            [3] => 0

            [4] => 0

            [5] => 0

            [6] => 1

            [7] => 1

        )


)


查看完整回答
反對 回復 2021-11-13
?
慕蓋茨4494581

TA貢獻1850條經(jīng)驗 獲得超11個贊

您可以使用一組數(shù)組函數(shù),例如array_fill()和array_replace()來實現(xiàn)這一點。解釋見評論


$array = [

    '2018' => [

        '40' => 1,

        '41' => 1,

        '47' => 1,

        '48' => 1,

        '52' => 1

    ],

    '2019' => [

        '3' => 1,

        '4' => 1

    ],

];


$result = []; // initialize result array


$years = array_keys($array); // Get given years

$first_year = min($years);   // Get first year

$last_year = max($years);    // Get last year


foreach ($array as $year => $value) { // Loop thru each year array

    $weeks = array_keys($value); // Get weeks

    $start = 1;                  // Set first week

    $weeknum = 52;               // Set number of weeks


    if ($year === $first_year) { // If first year, change number of weeks

        $start = min($weeks);    

        $weeknum -= $start - 1;  // number of weeks is 52 - the first week number - 1

    }


    if ($year === $last_year) {  // If last year, change number of weeks to last given week

        $weeknum = max($weeks);  // Weeks will be 1 - last given week

    }


    $result[$year] = array_replace(array_fill($start, $weeknum, 0), $value);

}


var_dump($result);

這樣做的第一個目標是填充基于年份的數(shù)組。

  • 如果是第一年,則創(chuàng)建第一個給定周到第 52 周的數(shù)組

  • 如果是去年,則創(chuàng)建第 1 周到最后一周的數(shù)組

  • 如果在中間的某個地方,請創(chuàng)建第 1 周到第 52 周的數(shù)組

然后用相同的鍵替換現(xiàn)有的數(shù)據(jù)數(shù)組


查看完整回答
反對 回復 2021-11-13
  • 2 回答
  • 0 關注
  • 147 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號