【问题标题】:Check if array of object is not empty检查对象数组是否不为空
【发布时间】:2015-02-03 17:47:38
【问题描述】:

我是 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

通过谷歌搜索某个站点,我意识到无法使用empty() 检查对象数组。但我非常想知道如何解决这个问题,因为我在对象中生成了查询结果。 我只想知道当$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" }
            } 
        } 

【问题讨论】:

  • array of object -> $kunj["DIAG"],你还想如何检查一个对象是否为空?!唯一的事情就是如果它被设置
  • isset()检查它而不是空的。
  • 您能否显示您的控制器代码,因为您可能没有将其传递到您的视图中
  • @Rizier123 我已经用isset() 尝试过,但仍然没有给出我预期的结果。实际上,通知已经消失,但 ICD 硬印仍然缺失 $kunj->DIAG 有值。
  • 我上面的评论也通知@Daniel评论

标签: php arrays codeigniter


【解决方案1】:

好的...基于$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>

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

【讨论】:

    【解决方案2】:

    if($kunj-&gt;DIAG != ''){ echo "&lt;th&gt;ICD&lt;/th&gt;"; } ?&gt;
    我认为这会解决它,因为有些时候
    正如我所见或理解的那样,你没有得到 null 值,而是在 thos vars 中得到 empty

    【讨论】:

      【解决方案3】:

      可以试试这个:

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

      【讨论】:

      • 实际上这仍然不适合我。通知刚刚过去,结果还是不符合我的预期。
      【解决方案4】:

      我遇到了这个问题,is_null 是解决方案
      试试这个:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-29
        相关资源
        最近更新 更多