我正在尝试做什么:
在Cakephp中获取find()查询的结果作为行数组
为什么:吗
我想将结果发送到Excel,因此常规的cakePHP格式不适合我。
我知道的解决方案:
我看到两种可能的解决方案:
我的问题:
是否有一个更简单的解决方案来获得标准格式的解决方案:带行的数组?
修改
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));
解决方案:(请问Dave):
foreach($data as &$row){
$row = Set::flatten($row);
}
答案 0 :(得分:2)
根据书籍[here],您可以使用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。
答案 1 :(得分:-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);