首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何更正数组以创建所需的表输出?

如何更正数组以创建所需的表输出?
EN

Stack Overflow用户
提问于 2015-02-25 14:23:25
回答 1查看 84关注 0票数 1

我有两个数组,一个用于在类似于表的结构中创建第一个列(服务),另一个用于创建其后的每一个列(day)。第一列数组的结构如下:

代码语言:javascript
运行
复制
Array
(
    [0] => DPW
    [1] => PNS
    [2] => WS1
    [3] => WS2
)

这是一个动态数组,因此可能有更多的值,但它总是唯一的,按字母顺序排序。

其他列的第二个数组具有如下结构:

代码语言:javascript
运行
复制
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连续两次,而星期一不是。我可以改变这些数组的格式,所以这就是我的问题所在。

视图期望输出

我的想法是,首先,一天应该包含与服务数组相同数量的键,那么我应该添加一个空白值来组成相同数量的键吗?为了连续地满足相同的服务,我应该增加一个更高的级别来满足多个值,如下所示:

代码语言:javascript
运行
复制
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
                        (

                        )
                )
        )
)

我还添加了空白值。最后,如何以与第一个(服务)数组相同的顺序打印这些值,使它们不处于错误的服务之下?

如果很难解释这一点,我可能会用错误的方式来解释,但这就是为什么我要问问题的原因。

编辑:

就这样,我现在唯一的问题是,我需要显示开始和截止日期,因为相同的项目分散在多天。例如,数组可能在某个时候具有这些值:

代码语言:javascript
运行
复制
[1] => Array
    (
        [date] => 42016
        [message] => 16:30 START
        [service] => DPM
    )

// etc...

[3] => Array
    (
        [date] => 42021
        [message] => 16:30 CUT OFF
        [service] => DPM
    )

因此,我需要一种方法,让这些在他们自己的行与背景颜色或其他什么,以表明他们是一个项目,如上面的图形。不确定这是否有可能?

谢谢罗伯特!

EN

回答 1

Stack Overflow用户

发布于 2015-02-25 17:43:40

我不确定这是不是你想要的,但也许会有帮助:

代码语言:javascript
运行
复制
$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表:

代码语言:javascript
运行
复制
<?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; ?>
                &nbsp;</td> 
            <?php endforeach; ?>

        </tr>
    <?php endforeach; ?>    
</table>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28721458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档