检查属性是否存在,是否存在属性

时间:2012-12-14 18:00:47

标签: php foreach object-properties

我有以下PHP代码:

$alignments = new StdClass();

        if ($query->num_rows > 0)
        {
            foreach($query->result() as $row){
                $alignments->{$row->table_id} = new StdClass();

                $alignments->{$row->table_id}->table_id = isset($row->table_id)?$row->table_id:NULL;
                $alignments->{$row->table_id}->title = isset($row->title)?$row->title:NULL;
                $alignments->{$row->table_id}->url = isset($row->url)?$row->url:NULL;
                $alignments->{$row->table_id}->state_id = isset($row->state_id)?$row->state_id:NULL;
                $alignments->{$row->table_id}->cross_discipline_alignment = isset($row->cross_discipline_alignment)?$row->cross_discipline_alignment:NULL;
                $alignments->{$row->table_id}->common_core = isset($row->common_core)?$row->common_core:NULL;
                $alignments->{$row->table_id}->grade_level = isset($row->grade_level)?$row->grade_level:NULL;
                $alignments->{$row->table_id}->indicators = new StdClass();
                $alignments->{$row->table_id}->indicators->{$row->indicator_id} = new StdClass();
                $alignments->{$row->table_id}->indicators->{$row->indicator_id}->indicator_id = isset($row->indicator_id)?$row->indicator_id:NULL;
                $alignments->{$row->table_id}->indicators->{$row->indicator_id}->indicator = isset($row->indicator)?$row->indicator:NULL;
                $alignments->{$row->table_id}->indicators->{$row->indicator_id}->key = isset($row->key)?$row->key:NULL;
                $alignments->{$row->table_id}->indicators->{$row->indicator_id}->extra_data = isset($row->extra_data)?$row->extra_data:NULL;
                $alignments->{$row->table_id}->indicators->{$row->indicator_id}->uri_k5 = isset($row->uri_k5)?$row->uri_k5:NULL;
                $alignments->{$row->table_id}->indicators->{$row->indicator_id}->uri_612 = isset($row->uri_612)?$row->uri_612:NULL;
            }

            return $alignments;
        }

问题是,在foreach循环中,如果有多个项目具有相同的$row->table_id,则设置循环中的最后一个项目(忽略所有其他项目)。我已经尝试了!isset($alignments->{row->table_id}),它仍然是最重要的。我想说的是,如果$alignments->{$row->table_id}的变量存在,请使用它,如果不存在,请将其设置为new StdClass()

1 个答案:

答案 0 :(得分:1)

也许您需要像这样包装初始化:

if (!property_exists($alignment, $row->table_id)) {
  $alignments->{$row->table_id} = new StdClass();
}