Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在每个php数组中具有相同数量的值_Php_Arrays_Multidimensional Array - Fatal编程技术网

在每个php数组中具有相同数量的值

在每个php数组中具有相同数量的值,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有以下数组: Array ( [0] => Array ( [data] => Array ( [0] => 2015-07-21 [1] => 2015-07-22 [2] => 2015-07-23 [3] => 2015-07-24 ) ) [

我有以下数组:

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
            )

    )

)

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

如果您总是在第一个元素上定义所有日期,那么您可以这样做:

$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;
        }
    }
}
$data=array();//你的阵列
$allDates=$data[0]['data'];
对于($i=1;$i
$res=[$array[0]];
//将默认数组设为全零
$default=array_combine($array[0]['data'],array_fill(0,count($array[0]['data']),0));
//使新数组更改当前的默认值
对于($i=1;$i$array[$i]['name'],
'data'=>array_replace($default,$array[$i]['data']);
印刷品(港币);;

谢谢!是的,日期总是在第一个元素上定义的。到目前为止,我从您的代码中发现有一个拼写错误$data[$]['data'])缺失)。你确定它是$data[$]而不是$data[$i]吗?我上面的两个更正都很好。剩下的唯一问题是插入的日期(值为0)顺序不正确。这很好,但有一个缺陷:数组的新结构与初始结构不同。信息方面的小问题:inital$array[0]['data']数组与原始数组相比格式错误;)我看不出打印输出有什么不同:(也许你可以帮助我理解,我会在这里更正答案,你有$res=[$array[0]['data']],而在示例中是$res=[$array[0]];。现在一切都好了。@dom771对不起,我的错了。只移动每个块
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
    )
)
$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;
        }
    }
}
$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);