在每个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);