首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php将数组行重新排列成列,以便在表中显示。

php将数组行重新排列成列,以便在表中显示。
EN

Stack Overflow用户
提问于 2016-04-11 14:22:43
回答 1查看 1.1K关注 0票数 1

我的数据库返回了这个数组。

代码语言:javascript
复制
Array
(
[0] => Array
    (
        [dwg_id] => 1
        [sws_dwg_no] => 160-001
        [client_dwg_no] => KSB/9972475771/WP5/02/001
        [dwg_title] => OVERALL LAYOUT AND REFERENCE DRAWING
        [dwg_by] => JES
        [dwg_date] => 2016-03-11 16:13:00
        [dwg_rev] => A
    )

[1] => Array
    (
        [dwg_id] => 1
        [sws_dwg_no] => 160-001
        [client_dwg_no] => KSB/9972475771/WP5/02/001
        [dwg_title] => OVERALL LAYOUT AND REFERENCE DRAWING
        [dwg_by] => JES
        [dwg_date] => 2016-04-04 21:41:31
        [dwg_rev] => B
    )

[2] => Array
    (
        [dwg_id] => 2
        [sws_dwg_no] => 160-002
        [client_dwg_no] => KSB/9972475771/WP5/02/002
        [dwg_title] => OVERALL LAYOUT AND REFERENCE DRAWING
        [dwg_by] => JES
        [dwg_date] => 2016-03-11 16:13:00
        [dwg_rev] => A
    )

[3] => Array
    (
        [dwg_id] => 2
        [sws_dwg_no] => 160-002
        [client_dwg_no] => KSB/9972475771/WP5/02/002
        [dwg_title] => OVERALL LAYOUT AND REFERENCE DRAWING
        [dwg_by] => JES
        [dwg_date] => 2016-04-04 21:41:31
        [dwg_rev] => B
    )

[4] => Array
    (
        [dwg_id] => 3
        [sws_dwg_no] => 160-100
        [client_dwg_no] => KSB/9972475771/WP5/02/100
        [dwg_title] => CONCRETE WORK PLAN AND DETAIL
        [dwg_by] => JES
        [dwg_date] => 2016-03-11 16:13:00
        [dwg_rev] => A
    )

我希望按照这个顺序排列数组,这样我就可以用新的数组填充html表。新数组的行是表的标题。

这就是新数组的样子。

代码语言:javascript
复制
Array
(
[0] => Array
    (
        [0] => Drawing no.
        [1] => 160-001
        [2] => 160-002
        [3] => 160-100
        [4] => 160-101
    )

[1] => Array
    (
        [0] => Client drawing no.
        [1] => KSB/9972475771/WP5/02/001
        [2] => KSB/9972475771/WP5/02/002
        [3] => KSB/9972475771/WP5/02/100
        [4] => KSB/9972475771/WP5/02/101
    )

[2] => Array
    (
        [0] => Title
        [1] => OVERALL LAYOUT AND REFERENCE DRAWING
        [2] => OVERALL LAYOUT AND REFERENCE DRAWING
        [3] => CONCRETE WORK PLAN AND DETAIL
        [4] => CONCRETE WORK SECTION
    )

[3] => Array
    (
        [0] => By
        [1] => JES
        [2] => JES
        [3] => JES
        [4] => JES
    )

[4] => Array
    (
        [0] => A
        [1] => 2016/04/04
        [2] => 2016/04/04
        [3] => 2016/03/11
        [4] => 2016/03/11
    )

[5] => Array
    (
        [0] => B
        [1] => 2016/04/04
        [2] => 2016/04/04
    )

   )

这是我的代码,我有工作到修订日期。$result是来自db的输入数组。

代码语言:javascript
复制
$new_array = array();
    if(count($result) > 0)
    {
        $dwg_no = array(0=>'Drawing no.') + array_column($result, 'sws_dwg_no', 'dwg_id');
        $client_dwg_no =array(0=> 'Client drawing no.') + array_column($result, 'client_dwg_no', 'dwg_id');
        $title = array(0=>'Title') + array_column($result,'dwg_title', 'dwg_id');
        $by = array(0=>'By') + array_column($result, 'dwg_by', 'dwg_id');       
        foreach($result as $row){
            $rev = $row['dwg_rev'];
            if($rev == $row['dwg_rev']){
                $rev_date[$row['dwg_id']] = date('Y/m/d', strtotime($row['dwg_date']));
            }
            elseif($rev >= $row['dwg_rev']) {
                $rev_date[$row['dwg_id']] = '';
            }

            ${'rev_'. $rev . '_date'} = array(0 => $rev) + $rev_date;
        }
        $new_array = array(
                        0 => $dwg_no,
                        1 => $client_dwg_no,
                        2 => $title,
                        3 => $by,
                        4 => ${'rev_'. $rev . '_date'});

    }

所以问题是

  1. 在正确的修订下安排修订日期。我的代码现在不这么做。根据刷新页面的次数,日期会更改。
  2. $new_array必须是动态的,这样修订的数量就不会受到限制。修订令来自A,然后是1-99

这张桌子应该是这样的

EN

回答 1

Stack Overflow用户

发布于 2016-04-11 18:43:52

只需做一个矩阵转置

代码语言:javascript
复制
function transpose($array) {
   array_unshift($array, null);
   call_user_func_array('array_map', $array);
}

在此之前:

代码语言:javascript
复制
160-001 | 160-002 | 160-003 | 
KSB/9972475771/WP5/02/001 | KSB/9972475771/WP5/02/002 | KSB/9972475771/WP5/02/100 | 

之后:

代码语言:javascript
复制
160-001 | KSB/9972475771/WP5/02/001 | 
160-002 | KSB/9972475771/WP5/02/002 | 
160-003 | KSB/9972475771/WP5/02/100 | 

这是我的完整代码:

代码语言:javascript
复制
<?php

$data = [
    ['160-001','160-002','160-003'],
    ['KSB/9972475771/WP5/02/001', 'KSB/9972475771/WP5/02/002 ', 'KSB/9972475771/WP5/02/100']
];

function transpose($array) {
        array_unshift($array, null);
        return call_user_func_array('array_map', $array);
}

foreach($data as $row) {
    foreach($row as $column) {
            echo $column . " | ";
    }
        echo "<br>";
}

$data = transpose($data);

foreach($data as $row) {
    foreach($row as $column) {
            echo $column . " | ";
    }
        echo "<br>";
}

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

https://stackoverflow.com/questions/36551444

复制
相关文章

相似问题

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