将laravel对象转换为数组

You*_*end 18 php arrays laravel laravel-4 laravel-3

Laravel输出:

Array
(
    [0] = stdClass Object
    (
        [ID] = 5

    )

    [1] = stdClass Object
    (
        [ID] = 4

    )

)
Run Code Online (Sandbox Code Playgroud)

我想将其转换为普通数组.只是想删除它stdClass Object.我也试过使用->toArray();但是我收到了一个错误:

在非对象上调用成员函数toArray().

我怎样才能解决这个问题?

功能已在http://www.srihost.com上实施

Jar*_*zyk 35

从Laravel版本5.4开始更新它已不再可能.

您可以像@Varun建议的那样更改数据库配置,或者如果您只想在这种情况下执行此操作,则:

DB::setFetchMode(PDO::FETCH_ASSOC);

// then
DB::table(..)->get(); // array of arrays instead of objects

// of course to revert the fetch mode you need to set it again
DB::setFetchMode(PDO::FETCH_CLASS);
Run Code Online (Sandbox Code Playgroud)


Mau*_*ice 26

foreach($yourArrayName as $object)
{
    $arrays[] = $object->toArray();
}
// Dump array with object-arrays
dd($arrays);
Run Code Online (Sandbox Code Playgroud)

或者toArray()失败,因为它是一个stdClass

foreach($yourArrayName as $object)
{
    $arrays[] =  (array) $object;
}
// Dump array with object-arrays
dd($arrays);
Run Code Online (Sandbox Code Playgroud)

不工作?也许你可以在这里找到答案:

将PHP对象转换为关联数组


Sel*_*lay 13

以防万一有人仍然在这里寻找答案。它可以使用普通的 PHP 来完成。一种更简单的方法是反向 json 对象。

function objectToArray(&$object)
{
    return @json_decode(json_encode($object), true);
}
Run Code Online (Sandbox Code Playgroud)


小智 8

您还可以通过更改将所有结果始终作为数组获取

// application/config/database.php

'fetch' => PDO::FETCH_CLASS,
 // to
'fetch' => PDO::FETCH_ASSOC,
Run Code Online (Sandbox Code Playgroud)

希望这会有所帮助.


小智 6

这对我有用:

$data=DB::table('table_name')->select(.......)->get();
$data=array_map(function($item){
    return (array) $item;
},$data);
Run Code Online (Sandbox Code Playgroud)

要么

$data=array_map(function($item){
    return (array) $item;
},DB::table('table_name')->select(.......)->get());
Run Code Online (Sandbox Code Playgroud)


小智 6

使用该toArray()方法将对象转换为数组:

$foo = Bar::first(); // Get object
$foo = $foo->toArray(); // Convert object to array
Run Code Online (Sandbox Code Playgroud)


小智 5

这在 Laravel 5.4 中对我有用

$partnerProfileIds = DB::table('partner_profile_extras')->get()->pluck('partner_profile_id');
$partnerProfileIdsArray = $partnerProfileIds->all();
Run Code Online (Sandbox Code Playgroud)

输出

array:4 [?
  0 => "8219c678-2d3e-11e8-a4a3-648099380678"
  1 => "28459dcb-2d3f-11e8-a4a3-648099380678"
  2 => "d5190f8e-2c31-11e8-8802-648099380678"
  3 => "6d2845b6-2d3e-11e8-a4a3-648099380678"
]
Run Code Online (Sandbox Code Playgroud)

https://laravel.com/docs/5.4/collections#method-all


小智 5

也可以将对象类型转换为数组。这对我来说很有效。

(array) $object;

将转换

stdClass Object
(
    [id] => 4
)
Run Code Online (Sandbox Code Playgroud)

Array(
    [id] => 4
)
Run Code Online (Sandbox Code Playgroud)

尝试将数据从查询生成器传递到视图时遇到同样的问题。由于数据作为对象出现。所以你可以这样做:

$view = view('template', (array) $object);
Run Code Online (Sandbox Code Playgroud)

在你看来,你使用像这样的变量

{{ $id }}
Run Code Online (Sandbox Code Playgroud)