Php 如何更正数组以创建所需的表输出?
我有两个数组,一个用于在类似表的结构中创建第一列(服务),第二个用于以后每隔一列(天)。第一列数组具有以下结构:Php 如何更正数组以创建所需的表输出?,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有两个数组,一个用于在类似表的结构中创建第一列(服务),第二个用于以后每隔一列(天)。第一列数组具有以下结构: Array ( [0] => DPW [1] => PNS [2] => WS1 [3] => WS2 ) Array ( [0] => Array ( [Monday] => Array ( [
Array
(
[0] => DPW
[1] => PNS
[2] => WS1
[3] => WS2
)
Array
(
[0] => Array
(
[Monday] => Array
(
[0] => Array
(
[date] => 42016
[message] => 07:00 START
[service] => DPW
)
[1] => Array
(
[date] => 42016
[message] => 16:30 START
[service] => PNS
)
[2] => Array
(
[date] => 42016
[message] =>
[service] => WS1
)
// etc ...
[3] => Array
(
[Thursday] => Array
(
[0] => Array
(
[date] => 42017
[message] =>
[service] => DPW
)
[1] => Array
(
[date] => 42017
[message] => 16:00 CUT OFF
[service] => DPW
)
[2] => Array
(
[date] => 42017
[message] =>
[service] => PNS
)
)
)
)
这是一个动态数组,因此可能会有更多的值,但它始终是唯一的,并按字母顺序排序
其他列的第二个数组具有以下结构:
Array
(
[0] => DPW
[1] => PNS
[2] => WS1
[3] => WS2
)
Array
(
[0] => Array
(
[Monday] => Array
(
[0] => Array
(
[date] => 42016
[message] => 07:00 START
[service] => DPW
)
[1] => Array
(
[date] => 42016
[message] => 16:30 START
[service] => PNS
)
[2] => Array
(
[date] => 42016
[message] =>
[service] => WS1
)
// etc ...
[3] => Array
(
[Thursday] => Array
(
[0] => Array
(
[date] => 42017
[message] =>
[service] => DPW
)
[1] => Array
(
[date] => 42017
[message] => 16:00 CUT OFF
[service] => DPW
)
[2] => Array
(
[date] => 42017
[message] =>
[service] => PNS
)
)
)
)
所以基本上每天都是下一个专栏。我的问题是,我最初认为第二个数组中的服务密钥每天的顺序都是相同的,但事实并非如此。你可以从周四看到DPW是连续两次的,而周一不是。我可以更改这些数组的格式,这就是我的问题所在
我的想法是,一天应该包含与服务数组相同数量的键,那么我应该添加一个空白值来组成相同数量的键吗?为了连续提供相同的服务,我是否应该添加一个更高的级别以满足多个值的需要,如下所示:
Array
(
// etc ...
[3] => Array
(
[Thursday] => Array
(
[0] => Array
(
[0] => Array
(
[date] => 42017
[message] =>
[service] => DPW
)
[1] => Array
(
[date] => 42017
[message] =>
[service] => DPW
)
)
[2] => Array
(
[0] => Array
(
[date] => 42017
[message] =>
[service] => PNS
)
)
[3] => Array
(
)
[4] => Array
(
)
)
)
)
我也加入了空白值。最后,我如何以与第一个(服务)数组相同的顺序打印这些值,以便它们不在错误的服务下
如果很难解释这一点,我可能会走错方向,但这就是为什么我要问这些问题编辑: 几乎就在这里,我现在唯一的问题是,我需要显示开始和截止日期,因为它是同一个项目,分布在多天内。例如,数组可能在某个点具有以下值:
[1] => Array
(
[date] => 42016
[message] => 16:30 START
[service] => DPM
)
// etc...
[3] => Array
(
[date] => 42021
[message] => 16:30 CUT OFF
[service] => DPM
)
因此,我需要一种方法,让这些在他们自己的行与背景颜色或东西,以表明他们是一个项目,如上图。不确定这是否可行
谢谢
罗伯特 我不确定这是否正是您想要的,但它可能会有所帮助:
$services = array('DPW', 'PNS', 'WS1', 'WS2');
$days = array(
array(
'Monday' => array(
array(
'date' => 42016,
'message' => '07:00 START',
'service' => 'DPW'
),
array(
'date' => 42016,
'message' => '16:30 START',
'service' => 'PNS'
),
array(
'date' => 42016,
'message' => '',
'service' => 'WS1'
),
),
),
array(
'Thursday' => array(
array(
'date' => 42017,
'message' => '',
'service' => 'DPW'
),
array(
'date' => 42017,
'message' => '16:00 CUT OFF',
'service' => 'DPW'
),
array(
'date' => 42017,
'message' => '',
'service' => 'PNS'
)
)
)
);
这是HTML表格:
<?php $service_days = []; ?>
<table cellpadding="10" width="100%" align="left">
<thead>
<td style="background:#333;color:#FFF">Service</td>
<?php foreach($days as $day): ?>
<td style="background:#666;color:#FFF"><?php echo array_keys($day)[0]; ?></td>
<?php
foreach(array_values($day)[0] as $d)
$service_days[array_keys($day)[0]][$d['service']][] = $d;
?>
<?php endforeach; ?>
</thead>
<?php foreach($services as $service): ?>
<tr>
<td><?php echo $service ?></td>
<?php foreach($service_days as $day => $srv): ?>
<td>
<?php foreach($srv as $_service => $periode): ?>
<?php if($_service == $service): ?>
<?php foreach($periode as $p): ?>
<p style="background:#DDD"><?php echo $p['date'], '<br>', $p['message']; ?></p>
<?php endforeach; ?>
<?php endif; ?>
<?php endforeach; ?>
</td>
<?php endforeach; ?>
</tr>
<?php endforeach; ?>
</table>
服务
“我如何创建一个”-继续。。。(不太吸引人的注意力)。有意思的问题。@Fred-ii-显然是标题名中的一个错误。谢谢你的例子提供了很大的帮助,显示表格的方式比我尝试的要简单得多。我现在唯一的另一个问题是如何显示开始和结束我已经编辑了我的原始问题,这样你就可以看到我的问题。我想你可能会在不同的一天,而不是不同日期的同一天被“切断”是的,这会很困难。需要以某种方式关联每一项。我认为这是不可能的,因为exp你有$array['striday'][0]['date']=42017
和$array['striday'][1]['date']=42017
的同一天,那么你怎么知道开始日期是周一还是周二?我认为这个数字是错误的,正在等待反馈,我认为这应该是一个约会,或者说应该是一个约会。基本上,这些信息是从一个XML文件中解析出来的,然后转换成时间表。