Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将PHP对象排列到数组中进行显示_Php_Codeigniter_Object - Fatal编程技术网

如何将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'

我是一名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'
   ),
),
出于在模板中显示的目的,我希望首先基于日期将其设置为多维数组。这是一个相当简单的转换,我使用了一个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索引的对象数组来处理。这是一个非常好的讨论,我刚刚很快发现了关于阵列与对象性能的讨论。也许这会帮助你做出决定。