我正在关注this documentation
在我的laravel 4项目中实现导出到Excel。
所以我试图从数组中生成excel文件:
//$results is taken with db query
$data = array();
foreach ($results as $result) {
$result->filed1 = 'some modification';
$result->filed2 = 'some modification2';
$data[] = $result;
}
Excel::create('Filename', function($excel) use($data) {
$excel->sheet('Sheetname', function($sheet) use($data) {
$sheet->fromArray($data);
});
})->export('xls');
但这引起了例外:
Object of class stdClass could not be converted to string
我做错了什么?
更新:
试过这个:
$data = get_object_vars($data);
导致:
get_object_vars() expects parameter 1 to be object, array given
此:
$data = (array)$data;
导致初始错误。
答案 0 :(得分:29)
在一行代码中尝试这个简单: -
$data= json_decode( json_encode($data), true);
希望有所帮助:)
答案 1 :(得分:22)
$data
确实是一个数组,但它由对象组成。
在创建内容之前将其内容转换为数组:
$data = array();
foreach ($results as $result) {
$result->filed1 = 'some modification';
$result->filed2 = 'some modification2';
$data[] = (array)$result;
#or first convert it and then change its properties using
#an array syntax, it's up to you
}
Excel::create(....
答案 2 :(得分:4)
您可能需要先将对象更改为数组。我不知道export
做了什么,但我认为它期待一个数组。
您可以使用
或者如果它是一个简单的对象,你可以对其进行类型转换。
$arr = (array) $Object;
答案 3 :(得分:2)
如果你有stdClass对象的集合,你可以试试这个:
$data = $data->map(function ($item){
return get_object_vars($item);
});
答案 4 :(得分:0)
这很容易,您需要做的就是这样抓住您的内容
$result->get(filed1) = 'some modification';
$result->get(filed2) = 'some modification2';
答案 5 :(得分:0)
当我试图通过使用另一个对象的返回值来调用对象元素时,我收到了相同的错误;
$this->array1 = a json table which returns country codes of the ip
$this->array2 = a json table which returns languages of the country codes
$this->array2->$this->array1->country;// Error line
上面的代码引发了错误,我尝试了多种方法来修复它;在另一个函数中将此部分$this->array1->country
称为返回值(string)
,并用引号引起来。等等。我什至无法在网上找到解决方案,然后我意识到解决方案非常简单。您要做的所有事情都用大括号将其包裹起来,从而可以使用另一个对象的元素值作为对象。喜欢;
$this->array1 = a json table which returns country codes of the ip
$this->array2 = a json table which returns languages of the country codes
$this->array2->{$this->array1->country};
如果有人面对相同但找不到答案,我希望这可以有所帮助,因为我花了一个晚上来解决这个简单的解决方法=)