如何将PHP对象排列到数组中进行显示
我是一名PHP开发人员,通常使用数组代替对象,我想知道是否有基于键值的对象操作的最佳实践 以下面的多维事件数组为例,这是直接从数据库中提取的典型事件如何将PHP对象排列到数组中进行显示,php,codeigniter,object,Php,Codeigniter,Object,我是一名PHP开发人员,通常使用数组代替对象,我想知道是否有基于键值的对象操作的最佳实践 以下面的多维事件数组为例,这是直接从数据库中提取的典型事件 $events = array( 0=>array( 'eventid'=>1, 'title'=>'First Event', 'date'=>'20131010' ), 1=>array( 'eventid'=>2, 'title'
$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'
),
),
出于在模板中显示的目的,我希望首先基于日期将其设置为多维数组。这是一个相当简单的转换,我使用了一个helper函数
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,以防它有一些我不知道可能有用的帮助函数。在assoc函数中,您可以执行is_对象检查,如果它是对象,则可以将其转换为数组
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
}
}
}
对象/数组对数据的检索或排序方式没有太大影响。您所做的是常见的做法,另一种方法是在数据库查询中正确排序数据。您是说stdObject还是自定义类?nl-x,因为我不知道答案,我猜这是个问题。但是,如果我倒垃圾,上面写着我相信的stdObject。这是从CodeIgniter的标准活动记录调用中检索到的$query=$this->db->get('events');返回$query->result();是的,我很容易做到。只是不确定这是否是常见做法。更具体地说,我想知道当需要类似的东西时,将对象更改为数组是否是常见做法。现在我越来越多地使用对象,看到了很多东西,比如$message->title,执行此转换并突然看到$events['title'],这似乎很奇怪。我明白了您的意思-传入一个对象并返回一个数组。您可以轻松地举着一个旗子来确保返回一个对象。我看到的唯一其他选择是声明一个自定义事件类并使其可移植:谢谢您提供的信息。我希望这是我的最后一个问题,它将决定我的方向。向模板发送信息时,哪个更常见?是通常在发送到模板时以数组或对象形式显示的信息。如果是前者,那么我将在传递之前将所有对象放入数组。如果是后者,我将尝试保留objects对象,并尝试创建一个返回对象的assoc()函数。我认为这真的是您所熟悉的。我个人喜欢将数据作为由某种GUID索引的对象数组来处理。这是一个非常好的讨论,我刚刚很快发现了关于阵列与对象性能的讨论。也许这会帮助你做出决定。