【发布时间】:2014-01-11 03:01:01
【问题描述】:
我是一名 PHP 开发人员,通常使用数组代替对象,我想知道是否有任何基于键值的对象操作的最佳实践。
采用以下多维事件数组,这是您直接从数据库中提取的典型事件。
$events = array(
0=>array(
'eventid'=>1,
'title'=>'First Event',
'date'=>'20131010'
),
1=>array(
'eventid'=>2,
'title'=>'Second Event',
'date'=>'20131022'
),
2=>array(
'eventid'=>3,
'title'=>'Third Event',
'date'=>'20131010'
),
),
为了在我的模板中显示,我想首先根据日期将其设为多维数组。这是相当简单的转换,我使用了辅助函数。
assoc($events,'date','eventid');
导致:
$events = array(
20131010=>array(
1 => array(
'eventid'=>1,
'title'=>'First Event',
'date'=>'20131010'
),
3 => array(
'eventid'=>3,
'title'=>'Third Event',
'date'=>'20131010'
),
),
20131022=>array(
2 => array(
'eventid'=>1,
'title'=>'First Event',
'date'=>'20121010'
),
),
),
通过这种方式,我可以轻松地在模板端为每个日期运行数组,为该日期创建一个标题,然后在下面显示当天的事件。
我可以继续尝试为对象创建一个类似的 assoc() 函数,但我觉得这应该是一个相当普遍的事情,并且可能有一个标准的方法来做到这一点。如果你有一个对象而不是 $events 的数组,你会如何按照我描述的第二种方式来格式化它,或者你会吗?
还有一条信息:我正在使用 CodeIgniter,以防它有一些我不知道可能有用的辅助函数。
【问题讨论】:
-
对象/数组对数据的检索或排序方式没有太大影响。您所做的是常见做法,替代方法是在数据库查询中正确排序数据。
-
你说的是 stdObject 还是自定义类?
-
nl-x,因为我不知道答案,我猜这是个问题。但是,如果我 var_dump,它说我相信 stdObject。这是从 CodeIgniter 的标准活动记录调用中检索到的内容。 $query = $this->db->get('events');返回 $query->result();
标签: php codeigniter object