繁体   English   中英

每个php数组中的值相同

[英]having same amount of value in each php array

我有以下数组:

Array
(
[0] => Array
    (
        [data] => Array
            (
                [0] => 2015-07-21
                [1] => 2015-07-22
                [2] => 2015-07-23
                [3] => 2015-07-24
            )

    )

[1] => Array
    (
        [name] => 3389 Remote Desktop
        [data] => Array
            (
                [2015-07-21] => 37
                [2015-07-22] => 21
                [2015-07-23] => 38
                [2015-07-24] => 14
            )

    )

[2] => Array
    (
        [name] => 80 HTTP
        [data] => Array
            (
                [2015-07-21] => 22
                [2015-07-22] => 2
                                   // <- here is missing [2015-07-23] => 0
                                   // <- here is missing [2015-07-24] => 0
            )

    )

[4] => Array
    (
        [name] => 21 FTP
        [data] => Array
            (
                                   // <- here is missing [2015-07-21] => 0                                         
                [2015-07-22] => 1
                [2015-07-23] => 20
                                   // <- here is missing [2015-07-24] => 0
            )

    )

)

什么功能可以实现添加缺少的元素? 到目前为止,我大致了解:

$newarray = array();
$count = count($arr[0][data]);
foreach($arr as $key => $subarr) {
    for ($i = 1; $i <= $count; $i++) {
        if (in_array($i, $subarr)) $newarray[$key][$i - 1] = $i;
        else $newarray[$key][$i - 1] = 0;
    }
}

它部分起作用并给出:

Array
(
[0] => Array
    (
        [0] => 0
        [1] => 0
        [2] => 0
        [3] => 0
    )

[3389 Remote Desktop] => Array
    (
        [0] => 0
        [1] => 0
        [2] => 0
        [3] => 0
    )

[80 HTTP] => Array
    (
        [0] => 0
        [1] => 0
        [2] => 0
        [3] => 0
    )

[21 FTP] => Array
    (
        [0] => 0
        [1] => 0
        [2] => 0
        [3] => 0
    )
)

但是我需要具有与初始数组完全相同的结构。 任何帮助欢迎。

$res = [$array[0]];
// make  default array with all zeros
$default = array_combine($array[0]['data'], array_fill(0,count($array[0]['data']),0));
// make new array changing default values with present

for($i = 1; $i < count($array); $i++ ) 
  $res[] = ['name' => $array[$i]['name'], 
            'data' => array_replace($default, $array[$i]['data'])];

print_r($res);

如果您始终在第一个元素上定义所有日期,则可以这样进行:

$data = array(); // your array
$allDates = $data[0]['data'];
for($i=1; $i<count($data); $i++)
{
    foreach($allDates as $reqDate)
    {
        if(!array_key_exists($reqDate, $data[$]['data'])
        {
            $data[$]['data'][$reqDate] = 0;
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM