2

我正在尝试做的事情:

在 Cakephp 中以行数组的形式获取 find() 查询的结果

为什么?:

我想将结果发送到 Excel,所以常规的 cakePHP 格式不适合我。

我知道的解决方案:

我看到两种可能的解决方案:

  • 自定义 SQL 查询
  • 处理返回的数组以满足我的需要

我的问题:

有没有更简单的解决方案来获得标准格式的解决方案:带行的数组?

编辑:

cakephp 返回这样的数组:

$data=array("0"=>array("ModelName"=>array(Model.field1,Model.field2),
                       "LinkedModelName"=>array(LinkedModel.field1,LinkedModel.field2)

)

我想:

$data=array("0"=>array(Model.field1,Model.field2,LinkedModel.field1,LinkedModel.field2));

解决方案:(感谢戴夫):

    foreach($data as &$row){
    $row = Set::flatten($row);
    }
4

2 回答 2

2

根据[这里]的书,您可以使用Set::flatten($data);“将多维数组折叠成一维”。

它的例子:

<?php
$arr = array(
    array(
        'Post' => array('id' => '1', 'title' => 'First Post'),
        'Author' => array('id' => '1', 'user' => 'Kyle'),
    ),
    array(
        'Post' => array('id' => '2', 'title' => 'Second Post'),
        'Author' => array('id' => '3', 'user' => 'Crystal'),
    ),
);
$res = Set::flatten($arr);
/* $res now looks like:
    Array (
        [0.Post.id] => 1
        [0.Post.title] => First Post
        [0.Author.id] => 1
        [0.Author.user] => Kyle
        [1.Post.id] => 2
        [1.Post.title] => Second Post
        [1.Author.id] => 3
        [1.Author.user] => Crystal
    )
*/

#.从那里(如果需要),删除字段上的前缀应该非常简单。

可能是这样的:

preg_replace('/^[0-9]+\.+/', '', $string);

我尚未对其进行测试,但这是对此处非常相似的问题的公认答案:Remove numeric prefix from string - PHP regex

于 2012-08-29T14:12:07.373 回答
-1

在 App Controller 文件中定义以下方法:

//flattens a multi-dimensional array (recursive implode)
function r_implode( $glue, $pieces )
{
    foreach( $pieces as $r_pieces )
    {
        if( is_array( $r_pieces ) )
        {
            $retVal[] = r_implode( $glue, $r_pieces );
        }
        else    
        {
            $retVal[] = $r_pieces;
        }
    }
    return implode( $glue, $retVal );
} 

只需将其调用到您的代码中:

 $data = $this->r_implode(',', $data);
 pr($data);

正如您被问到的那样,您需要内爆内部数组,例如:

$data=array("0"=>array(Model.field1,Model.field2,LinkedModel.field1,LinkedModel.field2));

然后你可以使用 foreach 循环来做到这一点:

foreach($data as $key => $indexed_array)
{
     $data[$key] = $this->r_implode(",", $indexed_array);
}
pr($data);
于 2012-08-29T13:43:10.067 回答