检查对象数组是否为空

时间:2015-02-03 17:47:39

标签: php arrays codeigniter

我是Codeigniter的新生儿,我非常渴望面对这个问题。所以,我刚用CI做了一个简单的应用程序。当我想检查一个对象数组(在这种情况下是$ kunj-> DIAG的数组)时,我收到错误通知。 以下是我的观点:

查看:

<table class="table table-striped table-bordered table-condensed" id="tablescroll" role="grid">
  <thead>
    <tr class="tablesorter-headerRow" role="row">
      <th>No.</th>
      <th>Nama</th>
      <?php if(!empty($kunj->DIAG)){ echo "<th>ICD</th>"; } ?>
    </tr>
  </thead>
  <tbody aria-live="polite" aria-relevant="all">
    <?php if(!empty($kunj)) print_r(count($kunj));
      if(!empty($kunj)){
        $no = 0;
      foreach ($kunj as $i): ?>
    <tr align='center'>
      <td><?php $no++; echo $no; ?></td>
      <td><?php echo $i->NAMA; ?></td>
      <?php if(!empty($i->DIAG)){ echo "<td>".$i->DIAG."</td>"; } ?>
    </tr>
    <?php endforeach ?>
    <?php } ?>
  </tbody>
</table>

控制器:

function kunjunganpx(){
    $this->load->model('simrs/diagnosa_model');

    $cari = array(
            'icd' => $this->input->post('icd'),
            'asr' => $this->input->post('asuransi'),
            'tgl_strt' => $this->input->post('tgl_strt'),
            'tgl_end' => $this->input->post('tgl_end'),
            'stat' => $this->input->post('px_stat'),
            'urut' => $this->input->post('urut'),
            'opsi' => $this->input->post('opsi'));

    $data['kunj'] = $this->diagnosa_model->get_kunjungan_list($cari);

    $this->load->view('kunjunganpx_view',$data);
}

这是我得到的注意事项:

A PHP Error was encountered

Severity: Notice

Message: Trying to get property of non-object

Filename: simrs/kunjunganpx_view.php

通过Google搜索某个网站,我意识到无法使用empty()检查对象数组。但我非常想知道如何解决这个问题,因为我在对象中生成了查询结果。 我只想知道如何隐藏&#39;当$ kunj-> DIAG没有价值时,ICD的硬拷贝。如果变量有一些值,则显示它。提前谢谢。

更新

根据会员的要求,我在此处附加var_dump($data);结果:

array(1)    { ["kunj"]=> array(2) 
            { [0]=> object(stdClass)#21 (20) 
                {   ["NAMA"]=> string(13) "SUPRIYANTO BP" 
                    ["DIAG"]=> string(5) "D48.0" } 
              [1]=> object(stdClass)#22 (20) 
                {   ["NAMA"]=> string(13) "SUPRIYANTO BP" 
                    ["DIAG"]=> string(5) "C44.9" }
            } 
        } 

4 个答案:

答案 0 :(得分:0)

if($kunj->DIAG != ''){ echo "<th>ICD</th>"; } ?>
我认为这会解决它,因为有些时候 正如我所看到的那样,或者未说明,你不会得到 null 的值,但是在你的变量中为空

答案 1 :(得分:0)

可以试试这个:

if (is_object($kunj) && !empty($kunj->DIAG)) {
    // do your stuff
}

答案 2 :(得分:0)

好的......基于$kunj=array()这就是我想出的事实。 empty()不起作用,因为该对象具有属性。如果它具有该属性,那么您需要解析额外的列。

您需要测试对象中是否存在DIAG属性。

 if (property_exists($kunj[0], "DIAG"))

之后,您可以测试$kunj是否为空,就像您正在做的那样。在foreach循环中,您将再次必须在解析额外表格单元格之前对属性进行测试。如果该属性存在,则不必测试为空。 我也改变了你的一些逻辑。这一切都导致了这一点:

<table class="table table-striped table-bordered table-condensed" id="tablescroll" role="grid">
<thead>
    <tr class="tablesorter-headerRow" role="row">
      <th>No.</th>
      <th>Nama</th>
      <?php
        if (property_exists($kunj[0], "DIAG")) {
            echo "<th>ICD</th>";
        }
      ?>
    </tr>
</thead>

<tbody aria-live="polite" aria-relevant="all">

<?php if(!empty($kunj)){ foreach ($kunj as $k => $i): ?>

    <tr align='center'>
      <td><?php echo ++$k; ?></td>
      <td><?php echo $i -> NAMA; ?></td>
       <?php
        if (property_exists($kunj[0], "DIAG")) {
            echo "<td>{$i->DIAG}</td>";
        }
        ?>
    </tr>

<?php endforeach;  } ?>

</tbody>
</table>

codepad示例:http://codepad.viper-7.com/3Jxi7k

答案 3 :(得分:0)

我遇到此问题,而 is_null 是解决方案
尝试一下:

    if(!is_null($kunj->DIAG)){echo "<th>ICD</th>";}