繁体   English   中英

将 Laravel 对象转换为数组

[英]Convert laravel object to array

Laravel 输出:

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

    )

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

    )

)

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

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

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

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

更新自 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);

对于高于 5.4 (Ver > 5.4) 的新 Laravel,请参阅https://laravel.com/docs/5.4/upgrade fetch mode 部分

Event::listen(StatementPrepared::class, function ($event) {
    $event->statement->setFetchMode(...);
});
foreach($yourArrayName as $object)
{
    $arrays[] = $object->toArray();
}
// Dump array with object-arrays
dd($arrays);

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

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

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

将 PHP 对象转换为关联数组

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

function objectToArray(&$object)
{
    return @json_decode(json_encode($object), true);
}

这对我有用:

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

或者

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

您还可以通过更改始终以数组形式获取所有结果

// application/config/database.php

'fetch' => PDO::FETCH_CLASS,
 // to
'fetch' => PDO::FETCH_ASSOC,

希望这会有所帮助。

这在 Laravel 5.4 中对我有用

$partnerProfileIds = DB::table('partner_profile_extras')->get()->pluck('partner_profile_id');
$partnerProfileIdsArray = $partnerProfileIds->all();

输出

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"
]

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

您需要遍历数组

for ($i = 0, $c = count($array); $i < $c; ++$i) {
    $array[$i] = (array) $array[$i];
}

ans 使用(array)转换,因为您有 Std 类的对象数组而不是对象本身

例子:

$users = DB::table('users')->get();

var_dump($users);

echo "<br /><br />";

for ($i = 0, $c = count($users); $i < $c; ++$i) {
    $users[$i] = (array) $users[$i];
}
var_dump($users);
exit;

输出为:

array(1) { [0]=> object(stdClass)#258 (8) { ["id"]=> int(1) ["user_name"]=> string(5) "admin" ["email"]=> string(11) "admin@admin" ["passwd"]=> string(60) "$2y$10$T/0fW18gPGgz0CILTy2hguxNpcNjYZHsTyf5dvpor9lYMw/mtKYfi" ["balance"]=> string(4) "0.00" ["remember_token"]=> string(60) "moouXQOJFhtxkdl9ClEXYh9ioBSsRp28WZZbLPkJskcCr0325TyrxDK4al5H" ["created_at"]=> string(19) "2014-10-01 12:00:00" ["updated_at"]=> string(19) "2014-09-27 12:20:54" } }

array(1) { [0]=> array(8) { ["id"]=> int(1) ["user_name"]=> string(5) "admin" ["email"]=> string(11) "admin@admin" ["passwd"]=> string(60) "$2y$10$T/0fW18gPGgz0CILTy2hguxNpcNjYZHsTyf5dvpor9lYMw/mtKYfi" ["balance"]=> string(4) "0.00" ["remember_token"]=> string(60) "moouXQOJFhtxkdl9ClEXYh9ioBSsRp28WZZbLPkJskcCr0325TyrxDK4al5H" ["created_at"]=> string(19) "2014-10-01 12:00:00" ["updated_at"]=> string(19) "2014-09-27 12:20:54" } } 

正如预期的那样。 stdClass对象已转换为数组。

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

$foo = Bar::first(); // Get object
$foo = $foo->toArray(); // Convert object to array

也可以将对象类型转换为数组。 这对我有用。

(array) $object;

会转换

stdClass Object
(
    [id] => 4
)

Array(
    [id] => 4
)

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

$view = view('template', (array) $object);

在您看来,您使用的变量是

{{ $id }}

如果只想获取数组中的 ID,可以使用 array_map:

    $data = array_map(function($object){
        return $object->ID;
    }, $data);

这样,在每个位置返回一个带有 ID 的数组。

它非常简单。 你可以这样使用:-

Suppose You have one users table and you want to fetch the id only
$users = DB::table('users')->select('id')->get();
$users = json_decode(json_encode($users)); //it will return you stdclass object
$users = json_decode(json_encode($users),true); //it will return you data in array
echo '<pre>'; print_r($users);

希望能帮助到你

$res = ActivityServer::query()->select('channel_id')->where(['id' => $id])->first()->attributesToArray();

我使用get() ,它返回一个对象,我使用attributesToArray()将对象属性更改为数组。

我建议你在你的方法中简单地做到这一点

public function MyAwesomeMethod($returnQueryAs = null)
{
    $tablename = 'YourAwesomeTable';

    if($returnQueryAs == 'array')
    {
        DB::connection()->setFetchMode(PDO::FETCH_ASSOC);
    }

    return DB::table($tablename)->get();
}

有了这个,你所需要的就是将字符串“array”作为你的参数传递,瞧! 返回一个关联数组。

对象到数组

$array = (array) $players_Obj;  

$object = new StdClass;
$object->foo = 1;
$object->bar = 2;

var_dump( (array) $object );

输出:

array(2) {
    'foo' => int(1)
    'bar' => int(2)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM