如何在CakePHP中格式化输出数组

时间:2010-07-15 18:48:08

标签: cakephp arrays find

假设我有一个索引操作,我想获得一个项目列表:

$this->Project->find('all', array('order' => 'Project.modified DESC', 'conditions' => array('Project.user_id' => 1)));

效果很好并返回以下数组:

Array ( [0] => Array ( [Project] => Array ( [id] => 2 [title] => test project ) ) [1] => Array ( [Project] => Array ( [id] => 1 [title] => first project ) ) )

如何修改find​​函数,以便按以下格式返回数组:

Array ( [projects] => Array ( [0] => Array ( [id] => 2 [title] => test project ) [1] => Array ( [id] => 1 [title] => first project ) ) )

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用Set::combine()实用程序方法执行此操作。我已经将它用于类似的方式:

public function groupByMenu() {
  return Set::combine (
    $this->find ( 
      'all', 
      array (
        'conditions' => array ( 'NavItem.active' => 1 ),
        'order'      => 'NavMenuItem.display_order'
      )
    ),
    '{n}.NavItem.title',
    '{n}',
    '{n}.NavMenu.id'
  );
}

上面的代码采用了一组导航项目并重新组织它们,以便按照它们显示的菜单进行分组。

答案 1 :(得分:0)

结果是否在“项目”而不是“项目”下是不是很清楚,但如果你不喜欢它在[0]之下,我相信你可以使用PHPs array_shift:< / p>

$result = $this->Project->find('all', array('order' => 'Project.modified DESC', 'conditions' => array('Project.user_id' => 1)));
$result = array_shift($result);

结果将是:

Array ( [Project] => Array ( [id] => 2 [title] => test project ) ) [1] => Array ( [Project] => Array ( [id] => 1 [title] => first project ) )