简体   繁体   English

如何使用php和codeigniter隐藏检索到的数据值的重复部分

[英]How to hide repeating part of the retrieved data values using php and codeigniter

I have obtained following table as a result of this MySQL statement 由于这个MySQL语句,我已经获得了下表

SELECT * FROM expenses, income 
WHERE expenses.projectname=income.projectname 
AND expenses.task=income.task

在此输入图像描述 These are the fields in my project table 这些是我的项目表中的字段

在此输入图像描述

These are the fields of my task table 这些是我的任务表的字段 在此输入图像描述

In this table, one project has many tasks. 在此表中,一个项目有许多任务。 Therefore project, client, project start and end date column repeat meaninglessly. 因此项目,客户,项目开始和结束日期列无意义地重复。 How can I show them only once for all tasks? 如何才能为所有任务显示一次? How can I apply PHP hide logic here? 如何在这里应用PHP隐藏逻辑? Following diagram shows what I need to achieve. 下图显示了我需要实现的目标。 Data are retrieved through MySQL query. 通过MySQL查询检索数据。 But how can I hide unnecessary values repeating 但是我怎样才能隐藏重复的不必要的值 在此输入图像描述 This is the CodeIgniter view page 这是CodeIgniter视图页面

<table class="table table-lg">
<thead >
    <tr class="filters">

       <th><input type="text" class="form-control" placeholder="Project" disabled></th>
        <th><input type="text" class="form-control" placeholder="Employee" disabled></th>
        <th><input type="text" class="form-control" placeholder="Task" disabled></th>
        <th><input type="text" class="form-control" placeholder="Expense" disabled></th>
        <th><input type="text" class="form-control" placeholder="Amount" disabled></th>
        <th><input type="text" class="form-control" placeholder="Paid/Not" disabled></th>
        <th><input type="text" class="form-control" placeholder="Client" disabled></th>
        <th><input type="text" class="form-control" placeholder="Cost" disabled></th>
        <th><input type="text" class="form-control" placeholder="Income " disabled></th>
        <th><input type="text" class="form-control" placeholder="Date" disabled></th>

    </tr>
</thead>
<tbody>
<?php
if(isset($view_data1) && is_array($view_data1) && count($view_data1)): $i=1;
foreach ($view_data1 as $key => $data) { 
?>

<tr <?php if($i%2==0){echo 'class="even"';}else{echo'class="odd"';}?>>

    <td><?php echo $data['projectname']; ?></td> 
    <td><?php echo $data['employee']; ?></td> 
    <td><?php echo $data['task']; ?></td> 
    <td><?php echo $data['ExpenseName']; ?></td> 
    <td><?php echo $data['ExpenseAmount']; ?></td>
    <td><?php echo $data['pn']; ?></td>  
   <td><?php echo $data['cname']; ?></td>
   <td><?php echo $data['taskcost']; ?></td> 
   <td><?php echo $data['amount']; ?></td> 
   <td><?php echo $data['datetimepicker_mask']; ?></td> 
</tr>
<?php
    $i++;
      }
    else:
?>
<tr>
    <td colspan="7" align="center" >No Records Found..</td>
</tr>
<?php
    endif;
?>
</tbody>                
</table>

I didn't test this code, but the idea is to remember the last key (projectname and employee in this case) and then compare it to the current key. 我没有测试这段代码,但想法是记住最后一个密钥(在这种情况下为projectname和employee),然后将它与当前密钥进行比较。

The fields in your sample code don't match your Word doc example table so I just went with your code sample. 示例代码中的字段与您的Word文档示例表不匹配,因此我只使用了您的代码示例。

    <tbody>

        <?php
        if (isset($view_data1) && is_array($view_data1) && count($view_data1)) {

            $i = 1;
            $last_key = '';

            foreach ($view_data1 as $key => $data) {

                $stripe = 'odd';
                if ($i % 2 == 0) {
                     $stripe = 'even';
                }
                echo "<tr class='$stripe'>";
                $i++;

                $current_key = $data['projectname'] . $data['employee'];

                if ($current_key !== $last_key) {

                    echo "<td>" . $data['projectname'] . "</td>";
                    echo "<td>" . $data['employee'] . "</td>";
                } else {

                    echo "<td colspan='2'></td>";
                }

                $last_key = $current_key;
                ?>

            <td><?php echo $data['task']; ?></td>
            <td><?php echo $data['ExpenseName']; ?></td>
            <td><?php echo $data['ExpenseAmount']; ?></td>
            <td><?php echo $data['pn']; ?></td>
            <td><?php echo $data['cname']; ?></td>
            <td><?php echo $data['taskcost']; ?></td>
            <td><?php echo $data['amount']; ?></td>
            <td><?php echo $data['datetimepicker_mask']; ?></td>
        </tr>
        <?php
    }
} else {
    ?>
    <tr><td colspan="10" align="center" >No Records Found..</td></tr>
    <?php
}
?>

</tbody>
</table>

don't select two table at the time. 当时不要选择两张桌子。 join them with the condition. 加入条件。

SELECT expenses.*,income.*,expenses.id as p_id FROM expenses
join income ON expenses.task=income.task AND expenses.projectname=income.projectname

change your view foreach section 改变你对foreach部分的看法

<table class="table table-lg">
<thead >
    <tr class="filters">

       <th ><input type="text" class="form-control" placeholder="Project" disabled></th>
        <th ><input type="text" class="form-control" placeholder="Employee" disabled></th>
        <th ><input type="text" class="form-control" placeholder="Task" disabled></th>
        <th ><input type="text" class="form-control" placeholder="Expense" disabled></th>
        <th ><input type="text" class="form-control" placeholder="Amount" disabled></th>
        <th ><input type="text" class="form-control" placeholder="Paid/Not" disabled></th>
        <th ><input type="text" class="form-control" placeholder="Client" disabled></th>
        <th ><input type="text" class="form-control" placeholder="Cost" disabled></th>
        <th ><input type="text" class="form-control" placeholder="Income " disabled></th>
        <th ><input type="text" class="form-control" placeholder="Date" disabled></th>
    </tr>
</thead>
<tbody>
<?php
if(isset($view_data1) && is_array($view_data1) && count($view_data1)): $i=1;
$is_exists=array();
foreach ($view_data1 as $key => $data) { 
?>

<tr <?php if($i%2==0){echo 'class="even"';}else{echo'class="odd"';}?>>
<?php
    if(!in_array($data['p_id'], $is_exists)){
        $is_exists[]=$data['p_id'];
    ?>
        <td><?php echo $data['projectname']; ?></td> 
        <td><?php echo $data['employee']; ?></td> 
        <td><?php echo $data['task']; ?></td> 
        <td><?php echo $data['ExpenseName']; ?></td> 
    <?php
    }else{
     echo "<td rowspan='4'></td>";
    }
    ?>

   <td><?php echo $data['ExpenseAmount']; ?></td>
   <td><?php echo $data['pn']; ?></td>  
   <td><?php echo $data['cname']; ?></td>
   <td><?php echo $data['taskcost']; ?></td> 
   <td><?php echo $data['amount']; ?></td> 
   <td><?php echo $data['datetimepicker_mask']; ?></td> 
</tr>
<?php
    $i++;
      }
    else:
?>
<tr>
    <td colspan="7" align="center" >No Records Found..</td>
</tr>
<?php
    endif;
?>

</tbody>                
</table>

Don't merge tables like that. 不要合并这样的表。 Use join query inside your models and call it in views through controllers 在模型中使用连接查询,并通过控制器在视图中调用它

public function getExpenses(){
     $this->db->select("addexpense.exp_date, addexpense.exp_amount, addexpense.exp_note, addexpense.exp_created, addcategory.category_name");
     $this->db->from('addexpense');
     $this->db->join('addcategory', 'addcategory.category_id = addexpense.category_id');
     $query = $this->db->get();
     return $query->result();
}

if i understand you correctly you can try the following. 如果我理解你,你可以试试以下。

<?php

$arrData = [
    [
        "projectname" => "First Project",
        "employee" => "First Client",
        "projectstart" => "12-12-2017",
        "projectend" => "12-12-2019",
        "task" => "Task 1",
        "description" => "Description 1",
        "commission" => "1000",
        "taststart" => "01-01-2018",
        "taskend" => "10-01-2018"
    ],
    [
        "projectname" => "First Project",
        "employee" => "First Client",
        "projectstart" => "12-12-2017",
        "projectend" => "12-12-2019",
        "task" => "Task 2",
        "description" => "Description 2",
        "commission" => "1000",
        "taststart" => "01-01-2018",
        "taskend" => "10-01-2018"
    ],
    [
        "projectname" => "First Project",
        "employee" => "First Client",
        "projectstart" => "12-12-2017",
        "projectend" => "12-12-2019",
        "task" => "Task 3",
        "description" => "Description 3",
        "commission" => "1000",
        "taststart" => "01-01-2018",
        "taskend" => "10-01-2018"
    ],

    [
        "projectname" => "Second Project",
        "employee" => "Second Client",
        "projectstart" => "12-12-2017",
        "projectend" => "12-12-2019",
        "task" => "Task 4",
        "description" => "Description 4",
        "commission" => "1000",
        "taststart" => "01-01-2018",
        "taskend" => "10-01-2018"
    ],
    [
        "projectname" => "Second Project",
        "employee" => "Second Client",
        "projectstart" => "12-12-2017",
        "projectend" => "12-12-2019",
        "task" => "Task 5",
        "description" => "Description 5",
        "commission" => "1000",
        "taststart" => "01-01-2018",
        "taskend" => "10-01-2018"
    ],
    [
        "projectname" => "Second Project",
        "employee" => "Second Client",
        "projectstart" => "12-12-2017",
        "projectend" => "12-12-2019",
        "task" => "Task 6",
        "description" => "Description 6",
        "commission" => "1000",
        "taststart" => "01-01-2018",
        "taskend" => "10-01-2018"
    ],


];

?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
    <title>Bootstrap 101 Template</title>

    <!-- Bootstrap -->
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">

    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
</head>
<body>
<div class="container">
    <table class="table table-striped table-hover">
    <thead>
     <tr>
        <th>Project</th>
        <th>Client</th>
        <th>Project start on</th>
        <th>Project end on</th>
        <th>task</th>
        <th>description</th>
        <th>commission</th>
        <th>task start on</th>
        <th>task end on</th>
     </tr>
    </thead>
    <tbody>
    <?php
    $strSavedProjectName = false;
    foreach($arrData AS $arrItem)
    {
    ?>
     <tr>
        <?php
        if (!$strSavedProjectName || $strSavedProjectName!= $arrItem['projectname'])    :
        ?>
        <td><?=$arrItem['projectname']; ?>
        <td><?=$arrItem['employee']; ?>
        <td><?=$arrItem['projectstart']; ?>
        <td><?=$arrItem['projectend']; ?>
        <?php
        else :
        ?>
        <td colspan="4"></td>
        <?php
        endif;
        ?>
        <td><?=$arrItem['task']; ?>
        <td><?=$arrItem['description']; ?>
        <td><?=$arrItem['commission']; ?>
        <td><?=$arrItem['taststart']; ?>
        <td><?=$arrItem['taskend']; ?>
     </tr>
    <?php
        $strSavedProjectName = $arrItem['projectname'];
    }
    ?>
    </tbody>
    </table>
</div>
    <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <!-- Include all compiled plugins (below), or include individual files as needed -->
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>
</body>
</html>

This is a full example, based on your data - so you should be able to transform this to your view easily. 这是一个完整的示例,基于您的数据 - 因此您应该能够轻松地将其转换为您的视图。

The Logic 逻辑

The hide logic I have implemented, works in this order: 我实现的隐藏逻辑按以下顺序工作:

  • Initial Condition 初始条件
  • Main Loop 主循环
  • Condition Check 条件检查
  • Remember Last Condition 记住最后的条件

The HTML table and PHP looks like this: HTML表和PHP如下所示:

<table border="1">
    <thead>
        <tr>
            <th>Project</th>
            <th>Client</th>
            <th>Project Start</th>
            <th>Project End</th>
            <th>Task</th>
            <th>Description</th>
            <th>Commission</th>
            <th>Task Start</th>
            <th>Task End</th>
        </tr>
    </thead>
    <tbody>
        <!-- Initial Condition -->
        <?php $the_project = "";?>

        <!-- Main Loop -->
        <?php foreach ($data as $x => $datum) { ?>
            <tr>

            <!-- Condition Check -->
            <!-- If not the same with the last project, it will show the columns. -->
            <!-- That's why the Initial Condition is empty so that the 1st time this Condition Check run will always result true. -->
            <?php if($datum['project'] != $the_project) { ?>
                <td><?php echo $datum['project'];?></td>
                <td><?php echo $datum['client'];?></td>
                <td><?php echo $datum['proj_start'];?></td>
                <td><?php echo $datum['proj_end'];?></td>
            <?php } else { ?>
                <td colspan="4">&nbsp;</td>
            <?php } ?>
            <!-- /Condition Check -->

                <td><?php echo $datum['task'];?></td>
                <td><?php echo $datum['desc'];?></td>
                <td><?php echo $datum['commission'];?></td>
                <td><?php echo $datum['task_start'];?></td>
                <td><?php echo $datum['task_end'];?></td>
            </tr>

            <!-- Remember Last Condition -->
            <?php $the_project = $datum['project'];?>
        <?php }?>   
        <!-- /Main Loop -->     
    </tbody>
</table>

You don't have to compare all Project , Client , Start Date , and End Date , assuming the same project will have the same Client , Start Date and End Date . 您不必比较所有ProjectClientStart DateEnd Date ,假设同一项目将具有相同的ClientStart DateEnd Date That's why it only compares the project ( $the_project ). 这就是为什么它只比较项目( $the_project )。

The Data 数据

You can use this as sample data acting like data from queries. 您可以将此作为样本数据使用,就像查询中的数据一样。

<?php 
    $data = array(
        array(
            "project"   =>  "Mobile App",
            "client"    =>  "Client One",
            "proj_start"=>  "12-12-2017",
            "proj_end"  =>  "12-12-2019",
            "task"      =>  "task 1",
            "desc"      =>  "desc 1",
            "commission"=>  "1000",
            "task_start"=>  "01-01-2018",
            "task_end"  =>  "10-01-2018"
        ),
        array(
            "project"   =>  "Mobile App",
            "client"    =>  "Client One",
            "proj_start"=>  "12-12-2017",
            "proj_end"  =>  "12-12-2019",
            "task"      =>  "task 2",
            "desc"      =>  "desc 2",
            "commission"=>  "1000",
            "task_start"=>  "01-02-2018",
            "task_end"  =>  "10-02-2018"
        ),
        array(
            "project"   =>  "Mobile App",
            "client"    =>  "Client One",
            "proj_start"=>  "12-12-2017",
            "proj_end"  =>  "12-12-2019",
            "task"      =>  "task 3",
            "desc"      =>  "desc 3",
            "commission"=>  "1000",
            "task_start"=>  "01-04-2018",
            "task_end"  =>  "10-05-2018"
        ),
        array(
            "project"   =>  "Web App",
            "client"    =>  "Client Two",
            "proj_start"=>  "12-12-2017",
            "proj_end"  =>  "12-12-2019",
            "task"      =>  "task 1",
            "desc"      =>  "desc 1",
            "commission"=>  "1000",
            "task_start"=>  "01-01-2018",
            "task_end"  =>  "10-01-2018"
        ),
        array(
            "project"   =>  "Web App",
            "client"    =>  "Client Two",
            "proj_start"=>  "12-12-2017",
            "proj_end"  =>  "12-12-2019",
            "task"      =>  "task 2",
            "desc"      =>  "desc 2",
            "commission"=>  "1000",
            "task_start"=>  "01-02-2018",
            "task_end"  =>  "10-02-2018"
        )
    );
?>

Tips 1 提示1

I think the $i is not needed anymore as you can get the same result from $key in your code example. 我认为不再需要$i ,因为您可以从代码示例中的$key获得相同的结果。 The only difference is $key start from 0. 唯一的区别是$key从0开始。

Tips 2 提示2

If you still need the $i , you can simplify this code 如果您仍然需要$i ,则可以简化此代码

<tr <?php if($i%2==0){echo 'class="even"';}else{echo'class="odd"';}?>>

into

<tr class="<?php echo ($i%2==0) ? "even":"odd" ?>">

Tips 3 提示3

I don't know the purpose for class even or odd in your <tr> , but if you want to design for different color for each class, you might want to check Bootstrap and set it like <table class="table table-striped"> 我不知道你的<tr>偶数或奇数类的目的,但如果你想为每个类设计不同的颜色,你可能想检查Bootstrap并将其设置为<table class="table table-striped">

编辑查询为SELECT * FROM expenses, income WHERE expenses.projectname=income.projectname AND expenses.task=income.task Blockquote GROUP BY PROJECTID

First of all, you should re-arrange the $viewdata1 data structure . 首先,您应该重新安排$ viewdata1数据结构。 Basically, separate between the main Project data fields and the task data fields, then combine them in a better way.. 基本上,在主项目数据字段和任务数据字段之间分开,然后以更好的方式组合它们。

My assumptions are : 我的假设是:
1. [ task, ExpenseName, ExpenseAmount, pn, cname, taskcost, amount, datetimepicker_mask ] => are all task data fields 1. [task,ExpenseName,ExpenseAmount,pn,cname,taskcost,amount,datetimepicker_mask] =>都是任务数据字段
2. [ projectname , employee ] => are all project data fields 2. [projectname,employee] =>是所有项目数据字段

In your model (let's name it project_model ), 在你的模型中 (让我们将它命名为project_model ),
1. have a function that queries ONLY [ projectname or employee or the projectID or all other project data fields ] , let's name it allProject() . 1.具有查询[projectname或employee或projectID或所有其他项目数据字段]的函数 ,让我们将其命名为allProject() make sure it return something like 确保它返回类似的东西

[ 
  0 => [ 
          'id' => 101,
          'projectName' => 'Desktop App' , 
          other project data fields
        ] , 
  1 => [ 
          'id' => 102,
          'projectName' => 'Mobile App' , 
          other project data fields
        ] , 
  2 => [ 
          'id' => 103,
          'projectName' => 'Andriod App' , 
          other project data fields
        ] , 
  etc... 
]

2. have a function that searches/queries [ task, ExpenseName, ExpenseAmount, pn, cname, taskcost, amount, datetimepicker_mask ] based on [ projectname or the projectID ] ... let's name it task_query(projectID) ... make sure it return something like 2.具有基于[projectname或projectID]搜索/查询[task,ExpenseName,ExpenseAmount,pn,cname,taskcost,amount,datetimepicker_mask]的函数...让我们将其命名为task_query(projectID) ...确保它返回类似的东西

[
  0 => [ 
            'id' => 222,
            'projectID' => 101
            'task' => 'task 1',
            'description' => 'description 1',
            other task data fields
          ] , 
  1 => [ 
            'id' => 236,
            'projectID' => 101
            'task' => 'task 2',
            'description' => 'description 2',
            other task data fields
          ] , 
  2 => [ 
            'id' => 245,
            'projectID' => 101
            'task' => 'task 3',
            'description' => 'description 3',
            other task data fields
          ] , 
  etc.
]

In the controller , 控制器中

$data['viewdata1'] = $this->project_model->allProject();
foreach($data['viewdata1'] as $key => $value)
{
  $value['taskData'] = $this->project_model->task_query($value['id']);
}

the $data['viewdata1'] should look like... $ data ['viewdata1']应该看起来像......

[ 
  0 => [ 
          'id' => 101,
          'projectName' => 'Desktop App' , 
          other project data fields,
          'taskData' => [
                          0 => [ 
                                    'id' => 222,
                                    'projectID' => 101,
                                    'task' => 'task 1',
                                    'description' => 'description 1',
                                    other task data fields
                                  ] , 
                          1 => [ 
                                    'id' => 236,
                                    'projectID' => 101,
                                    'task' => 'task 2',
                                    'description' => 'description 2',
                                    other task data fields
                                  ] , 
                          2 => [ 
                                    'id' => 245,
                                    'projectID' => 101,
                                    'task' => 'task 3',
                                    'description' => 'description 3',
                                    other task data fields
                                  ] , 
                          etc.
                        ]
        ] , 
  1 => [ 
          'id' => 102,
          'projectName' => 'Mobile App' , 
          other project data fields,
          'taskData' => [
                          0 => [ 
                                    'id' => 123,
                                    'projectID' => 102,
                                    'task' => 'task 1b',
                                    'description' => 'description 1b',
                                    other task data fields
                                  ] , 
                          1 => [ 
                                    'id' => 124,
                                    'projectID' => 102,
                                    'task' => 'task 2b',
                                    'description' => 'description 2b',
                                    other task data fields
                                  ] , 
                          2 => [ 
                                    'id' => 125,
                                    'projectID' => 102,
                                    'task' => 'task 3b',
                                    'description' => 'description 3b',
                                    other task data fields
                                  ] , 
                          etc.
                        ]
        ] , 
  2 => [ 
          'id' => 103,
          'projectName' => 'Andriod App' , 
          other project data fields,
          'taskData' => [
                          0 => [ 
                                    'id' => 567,
                                    'projectID' => 103,
                                    'task' => 'task 1c',
                                    'description' => 'description 1c',
                                    other task data fields
                                  ] , 
                          1 => [ 
                                    'id' => 568,
                                    'projectID' => 103,
                                    'task' => 'task 2c',
                                    'description' => 'description 2c',
                                    other task data fields
                                  ] , 
                          2 => [ 
                                    'id' => 569,
                                    'projectID' => 103,
                                    'task' => 'task 3c',
                                    'description' => 'description 3c',
                                    other task data fields
                                  ] , 
                          etc.
                        ]
        ] , 
  etc... 
]

you are all set for the view 你们都为观点做好了准备

<table class="table table-lg">
<thead >
    <tr class="filters">

       <th><input type="text" class="form-control" placeholder="Project" disabled></th>
        <th><input type="text" class="form-control" placeholder="Employee" disabled></th>
        <th><input type="text" class="form-control" placeholder="Task" disabled></th>
        <th><input type="text" class="form-control" placeholder="Expense" disabled></th>
        <th><input type="text" class="form-control" placeholder="Amount" disabled></th>
        <th><input type="text" class="form-control" placeholder="Paid/Not" disabled></th>
        <th><input type="text" class="form-control" placeholder="Client" disabled></th>
        <th><input type="text" class="form-control" placeholder="Cost" disabled></th>
        <th><input type="text" class="form-control" placeholder="Income " disabled></th>
        <th><input type="text" class="form-control" placeholder="Date" disabled></th>

    </tr>
</thead>
<tbody>
<?php
if(isset($view_data1) && is_array($view_data1) && count($view_data1)): $i=1;
foreach ($view_data1 as $key1 => $data1) { 
    $howManyTasks = count($data1['taskData']);
      ?>

      <tr <?php if($i%2==0){echo 'class="even"';}else{echo'class="odd"';}?>>
          <td rowspan="<?= $howManyTasks ?>"><?php echo $data1['projectname']; ?></td> 
          <td rowspan="<?= $howManyTasks ?>"><?php echo $data1['employee']; ?></td> 

          <?php foreach($data1['taskData'] as $key2 => $data2) {?>
                <td><?php echo $data2['task']; ?></td> 
                <td><?php echo $data2['ExpenseName']; ?></td> 
                <td><?php echo $data2['ExpenseAmount']; ?></td>
                <td><?php echo $data2['pn']; ?></td>  
               <td><?php echo $data2['cname']; ?></td>
               <td><?php echo $data2['taskcost']; ?></td> 
               <td><?php echo $data2['amount']; ?></td> 
               <td><?php echo $data2['datetimepicker_mask']; ?></td> 
          </tr>
          <?php if($key2 != ($howManyTasks-1) ){ ?> <tr> <?php } ?>
          <?php } ?>
      <?php
          $i++;
      }
    else:
?>
<tr>
    <td colspan="7" align="center" >No Records Found..</td>
</tr>
<?php
    endif;
?>
</tbody>                
</table>
if($key == 0){
   $project_name = $data['projectname'];
   $first = true;
}else{
   $first = false;
   if($project_name != $data['projectname']){
      $project_name = $data['projectname'];
      $first = true;
   }
}


<td><?php     
if($first == true){
  ehco $data['projectname'];
}else{
  echo "";
}
</td>

Try like this inside your foreach i have not tired it but it may work and you may get some ideas. 在你的foreach中尝试这样的我没有厌倦但它可能有用,你可能会得到一些想法。 Here at first loop it will check $key, at first it will be 0 and $first variable will be true if $key is not 0 then it will check $project name to the loop project name if it does not matches it will replace it. 在第一个循环中,它将检查$ key,首先它将为0,如果$ key不为0,则$ first变量将为true然后它将检查$ project name到循环项目名称,如果它不匹配则将替换它。 Use same for client and other column you want to remove or empty. 对要删除或清空的客户端和其他列使用相同的列表。 I hope this works or it gives you some idea. 我希望这可行或者它会给你一些想法。

Use in_array() function and set your colspan and rowspan for your td 使用in_array()函数并为你的td设置你的colspanrowspan

Use the following Code in your view page, 在您的视图页面中使用以下代码,

<table class="table table-lg">
<thead >
    <tr class="filters">

       <th><input type="text" class="form-control" placeholder="Project" disabled></th>
        <th><input type="text" class="form-control" placeholder="Employee" disabled></th>
        <th><input type="text" class="form-control" placeholder="Task" disabled></th>
        <th><input type="text" class="form-control" placeholder="Expense" disabled></th>
        <th><input type="text" class="form-control" placeholder="Amount" disabled></th>
        <th><input type="text" class="form-control" placeholder="Paid/Not" disabled></th>
        <th><input type="text" class="form-control" placeholder="Client" disabled></th>
        <th><input type="text" class="form-control" placeholder="Cost" disabled></th>
        <th><input type="text" class="form-control" placeholder="Income " disabled></th>
        <th><input type="text" class="form-control" placeholder="Date" disabled></th>

    </tr>
</thead>
<tbody>
<?php
if(isset($view_data1) && is_array($view_data1) && count($view_data1)): $i=1;

foreach ($view_data1 as $key => $data) 
{ 
   $number_of_task[$data['projectname']][] =  $data['task'];
}

foreach ($view_data1 as $key => $data) { 
$array = array();
?>

<tr <?php if($i%2==0){echo 'class="even"';}else{echo'class="odd"';}?>>

<?php if(!in_array($data['projectname'],$array)) { 
 $array[] = $data['projectname'];
?>
    <td><?php echo $data['projectname']; ?></td> 
    <td><?php echo $data['employee']; ?></td> 
<?php  } else { ?>    
<td colspan="2" rowspan="<?php echo count($number_of_task[$data['projectname']]); ?>"> </td> 
    <td><?php echo $data['task']; ?></td> 
    <td><?php echo $data['ExpenseName']; ?></td> 
    <td><?php echo $data['ExpenseAmount']; ?></td>
    <td><?php echo $data['pn']; ?></td>  
   <td><?php echo $data['cname']; ?></td>
   <td><?php echo $data['taskcost']; ?></td> 
   <td><?php echo $data['amount']; ?></td> 
   <td><?php echo $data['datetimepicker_mask']; ?></td> 
</tr>
<?php
    $i++;
      }
}
    else:
?>
<tr>
    <td colspan="7" align="center" >No Records Found..</td>
</tr>
<?php
    endif;
?>
</tbody>                
</table>

This is my way of dealing with it. 这是我处理它的方式。 I hope this is the same as the problem you encounter :) 我希望这和你遇到的问题一样:)

*important, variables $dcost and $cd are variables that I set myself, please adjust it to what you have *重要的是,变量$ dcost和$ cd是我自己设置的变量,请根据你的需要进行调整

before 之前 之前 after 后 before code 在代码之前

foreach(your sql variable){
echo '<tr><td style="border-right:1px solid #000;text-align:center;vertical-align:middle;">'.$dcost['destination'].'</td>
        <td style="border-right:1px solid #000;text-align:center;vertical-align:middle;">'.$dcost['timein'].'</td>
        <td style="border-right:1px solid #000;text-align:center;vertical-align:middle;">'.$dcost['timein'].'</td>
        <td style="border-right:1px solid #000;text-align:center;vertical-align:middle;">'.$dcost['timein'].'</td>
        <td style="border-right:1px solid #000;text-align:center;vertical-align:middle;">'.$dcost['timeout'].'</td>';
        <td style="border-right:1px solid #000;text-align:center;vertical-align:middle;" class="mday">'.$cd['mday'].'</td><td style="border-right:1px solid #000;text-align:center;vertical-align:middle;" data-mrate="'.$cd['mrate'].'" class="mrate">'.rupiah($cd['mrate']).'</td><td style="border-right:1px solid #000;text-align:center;vertical-align:middle;" class="tm"></td><td style="border-right:1px solid #000;text-align:center;vertical-align:middle;" class="lday">'.$cd['lday'].'</td><td style="border-right:1px solid #000;text-align:center;vertical-align:middle;" data-lrate="'.$cd['lrate'].'" class="lrate">'.rupiah($cd['lrate']).'</td><td style="border-right:1px solid #000;text-align:center;vertical-align:middle;" class="tl"></td></tr>';}

after code 代码之后

foreach(your sql variable){
echo '<tr>';
if($i - 1 == 1){
    $i = 0;
echo '  <td style="border-right:1px solid #000;text-align:center;vertical-align:middle;">'.$dcost['destination'].'</td>
        <td style="border-right:1px solid #000;text-align:center;vertical-align:middle;">'.$dcost['timein'].'</td>
        <td style="border-right:1px solid #000;text-align:center;vertical-align:middle;">'.$dcost['timein'].'</td>
        <td style="border-right:1px solid #000;text-align:center;vertical-align:middle;">'.$dcost['timein'].'</td>
        <td style="border-right:1px solid #000;text-align:center;vertical-align:middle;">'.$dcost['timeout'].'</td>';
}else{
echo '  <td colspan="5" style="border-right:1px solid #000;">&nbsp;</td>';
}
echo '<td style="border-right:1px solid #000;text-align:center;vertical-align:middle;" class="mday">'.$cd['mday'].'</td><td style="border-right:1px solid #000;text-align:center;vertical-align:middle;" data-mrate="'.$cd['mrate'].'" class="mrate">'.rupiah($cd['mrate']).'</td><td style="border-right:1px solid #000;text-align:center;vertical-align:middle;" class="tm"></td><td style="border-right:1px solid #000;text-align:center;vertical-align:middle;" class="lday">'.$cd['lday'].'</td><td style="border-right:1px solid #000;text-align:center;vertical-align:middle;" data-lrate="'.$cd['lrate'].'" class="lrate">'.rupiah($cd['lrate']).'</td><td style="border-right:1px solid #000;text-align:center;vertical-align:middle;" class="tl"></td></tr>';}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM