如何将PHP对象安排到数组中进行显示

时间:2013-12-22 21:35:20

标签: php codeigniter object

我是一名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,以防它有一些我不知道可能有用的辅助函数。

1 个答案:

答案 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
    }
  }
}