php 类stdClass的对象无法转换为字符串- laravel

twh00eeo  于 2023-03-16  发布在  PHP
关注(0)|答案(7)|浏览(215)

我正在关注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;

导致初始错误。

au9on6nz

au9on6nz1#

在一行代码中尝试这个简单的方法:

$data= json_decode( json_encode($data), true);

希望有帮助:)

c6ubokkw

c6ubokkw2#

$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(....
9njqaruj

9njqaruj3#

您可能需要先将对象更改为数组。我不知道export是做什么的,但我假设它期望的是数组。
您可以使用
get_object_vars()
或者,如果它是一个简单的对象,您可以只对它进行类型转换。
$arr = (array) $Object;

unguejic

unguejic4#

如果您有一个stdClass对象的集合,您可以尝试以下操作:

$data = $data->map(function ($item){
            return get_object_vars($item);
        });
lmyy7pcs

lmyy7pcs5#

当我特灵使用另一个对象的返回值调用对象元素时,我收到了相同的错误,如;

$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};

如果任何人面对同样的问题,找不到答案,我希望这能有所帮助,因为我花了一个晚上这个简单的解决方案=)

ut6juiuv

ut6juiuv6#

这很简单,你需要做的就是这样的事情,像这样抓取你的内容

$result->get(filed1) = 'some modification';
  $result->get(filed2) = 'some modification2';
wwtsj6pe

wwtsj6pe7#

toArrayDeep对我很有效

$data = $query->get()->toArrayDeep();

相关问题