如何访问由 CodeIgniter 的 result_array() 填充的数组的行值

问题描述 投票:0回答:4

我的控制器上有此查询:

$this->db->select('t1.act_id, t2.login, t1.cust_name, t1.act_type, t1.act_detail, t1.date_added, t1.date_modified, t1.act_notes, '
         . 't3.category, t1.total_time, sum(t1.total_time) as total')
        ->from('activity as t1')
        ->join('user as t2', 't1.user_id = t2.user_id', 'LEFT')
        ->join('customer as t3', 't1.cust_name = t3.cust_name', 'LEFT')
        ->where('t2.login', $user)
        ->where('MONTH(t1.date_added)', $month)
        ->order_by('t1.date_added', "desc");

$query = $this->db->get();
$result = $query->result_array();        

$data = array('title' =>'Sales Report'." - ".$user,
    'user' => $result);
$this->load->view('admin/report/vw_report_excel', $data);

我想发布这个 SUM 值

sum(t1.total_time) 作为总计

但我不断收到错误,说“尝试获取非对象的属性”

这是我在我的视图中的调用方式(vw_report_excel):

<?php echo ($user->total); ?>

正确的调用或声明方式是怎样的? 问候

这是我的观点,我希望我的 SUM 从表/循环中排除。

<?php
$i=1;
foreach ($user as $xuser) {
    ?>
    <tr>
        <td><?php echo $xuser['act_id']; ?></td>
        <td><?php echo $xuser['login']; ?></td>
        <td><?php echo $xuser['cust_name']; ?></td>
        <td><?php echo $xuser['act_type']; ?></td>
        <td><?php echo $xuser['act_detail']; ?></td>
        <td><?php echo $xuser['date_added']; ?></td>
        <td><?php echo $xuser['date_modified']; ?></td>
        <td><?php echo $xuser['act_notes']; ?></td>
        <td><?php echo $xuser['category']; ?></td>
        <td><?php echo $xuser['total_time']; ?></td>
    </tr>
    <?php
    $i++;
}
?>
<td><?php echo count($user); ?></td>
<td><?php echo ($user->total); ?></td>
php arrays codeigniter activerecord resultset
4个回答
1
投票

基于 Codeignitor 生成查询结果手册指南

结果数组()

该方法以纯数组的形式返回查询结果,或者返回一个空的 未产生结果时的数组。通常您会在 foreach 循环,像这样:

所以使用

foreach()

foreach($user as $usr){
 echo $usr['total'];
}

或使用:-

<?php echo $user[0]['total']; ?>
(根据您问题中的代码修改)


1
投票

使用

foreach loop
获取您的数据

foreach($user as $usr){
 echo $use['total'];
}

1
投票

由于您使用

$result = $query->result_array();
检索数组作为结果,因此您需要使用数字索引和关联数组来访问它。因此,如果您想访问第一条记录;

<?php echo $user[0]['total']; ?>

或者如果你想遍历所有结果

<?php foreach( $user as $rec) echo $rec['total'];
//or
for($i=0,$count = count($user);$i<$count;$i++) echo $user[$i]['total']; ?>

PS如果你想遍历

for
循环会更快


1
投票

尝试这个,因为你返回的是数组而不是对象

<?php echo ($user[0]['total']); ?>

如果您想要与

$user[0]->total
完全相同,请将
$result = $query->result_array();
更改为
$result = $query->result();

当您获得单行时,有更有效的方法来避免像

$user[0]['total']
这样的索引。只需使用
row_array()
代替
result_array()

$result = $query->row_array();

如果您使用它,则不需要循环,您现在可以像

一样直接使用
<?php echo $user['login']; ?>
© www.soinside.com 2019 - 2024. All rights reserved.