我是一名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($事件, '日期', '事件ID');
导致:
$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'
),
),
),
通过这种方式,我可以轻松地在模板一侧浏览每个日期的数组,为该日期创建标题,然后在下面显示当天的事件。
我可以继续尝试为Objects创建一个类似的assoc()函数,但它让我觉得这应该是一个相当常见的事情,并且可能有一种标准的方法。如果你有一个对象而不是$ events的数组,那么你将如何以我描述的第二种方式对其进行格式化,或者你会这样做?
另外一条信息:我正在使用CodeIgniter,以防它有一些我不知道可能有用的辅助函数。
答案 0 :(得分:0)
在你的assoc函数中,你可以进行is_object检查,如果它是一个对象,则转换为数组。
function your_assoc_func($events){
if(is_object($events)){
$events = (array)$events
}
// If the object is more complex cast any containing objects you may run across
foreach($events as $event){
if(is_object($event)){
$event = (array)$event
}
}
}