上面描述的问题不能被认为是"高优先级",但它仍然困扰着我。
假设我需要从数据库中检索数据。我很确定,数据在那里,因为如果不是,整个应用程序就会崩溃。但我并不是要读"一系列结果",只是一个结果。那么,实现这一目标的"最简洁"方式是什么呢?
我的应用程序建立在编码器框架上,通过利用活动记录,这是迄今为止我想到的最好的:
$result = $this->db->from('some_table')->where('id',$id)->get()->result();
$record = $result[0];
我知道我可以设计查询有点不同(也许更短),例如通过使用get_where(…),但最终它仍然是一个"双行"。这可能是一个"奢侈"的问题,但我有点讨厌这段代码的"外观"。有没有一种方法可以让它变成一句"俏皮话"?
另一方面……如果你认为这是糟糕的编程,我根本不应该这样做,告诉我为什么,我应该做什么。
非常感谢您的意见!
CI原生方式:
$record = $this->db->from('some_table')->where('id',$id)->get()->row();
你可以走了
编辑更简洁的方式:
$record = $this->db->get_where('some_table', "id = '$id'")->row();
如果值是整数, '$id'
不需要加引号,比如这里。
代替
$result = $this->db->from('some_table')->where('id',$id)->get()->result();
$record = $result[0];
使用$record = reset($this->db->from('some_table')->where('id',$id)->get()->result());
同样的东西可以用来获得第一行的第一个字段(只要你的编码器返回记录作为数组,我不知道,因为我从未使用过CI)
$firstfield = reset(reset($this->db->from('some_table')->where('id',$id)->get()->result()));
欢呼
使用array_slice()
:
$record = array_slice($this->db->from('some_table')->where('id',$id)->get()->result(), 0, 1);
使用array_shift()
:
$record = array_shift($result = $this->db->from('some_table')->where('id',$id)->get()->result());
使用reset()
:
$record = reset($this->db->from('some_table')->where('id',$id)->get()->result());
$record = $this->db->from('some_table')->where('id',$id)->get()->result()[0];
我个人最喜欢的仍然是array_slice()
,因为它允许你得到任何你想要的索引,不与引用工作,不改变数组的内部指针位置。但是,所有这些解决方案都要求您弄清楚如果$result
不是一个数组(假设您不想要警告)会发生什么。
看看其他选择,有时两行比一行好。