我有两个数组,一个用于在类似表的结构中创建第一列(服务),另一个用于此后每隔一列(天)创建一列。第一列阵列具有以下结构:
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>