Php 将laravel对象转换为数组

Php 将laravel对象转换为数组,php,arrays,laravel,laravel-4,laravel-3,Php,Arrays,Laravel,Laravel 4,Laravel 3,拉维输出: Array ( [0] = stdClass Object ( [ID] = 5 ) [1] = stdClass Object ( [ID] = 4 ) ) 我想把它转换成普通数组。只想删除stdClass对象。我还尝试使用->toArray()但我得到一个错误: 对非对象调用成员函数toArray() 我怎样才能解决这个问题 功能已经在上实现,您需要在阵列上迭代 for ($i = 0, $

拉维输出:

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

    )

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

    )

)
我想把它转换成普通数组。只想删除
stdClass对象
。我还尝试使用
->toArray()但我得到一个错误:

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

我怎样才能解决这个问题


功能已经在

上实现,您需要在阵列上迭代

for ($i = 0, $c = count($array); $i < $c; ++$i) {
    $array[$i] = (array) $array[$i];
}
其输出为:

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的对象已转换为数组。

您也可以通过更改

// application/config/database.php

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

希望这会有所帮助。

自从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(版本>5.4)的新Laravel 请参阅“获取模式”部分

Event::listen(语句准备::类,函数($Event){
$event->statement->setFetchMode(…);
});
或者当
toArray()
由于是stdClass而失败时

foreach($yourArrayName as $object)
{
    $arrays[] =  (array) $object;
}
// Dump array with object-arrays
dd($arrays);
不工作?也许你可以在这里找到答案:


我建议您只需在您的方法中执行此操作

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

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

    return DB::table($tablename)->get();
}
有了这个,你只需要传递字符串“array”作为你的参数,瞧!将返回关联数组。

这对我来说很有效:

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


如果要在数组中仅获取ID,可以使用数组\映射:

    $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);
假设您有一个users表,并且只想获取id
$users=DB::table('users')->select('id')->get();
$users=json_解码(json_编码($users))//它将返回stdclass对象
$users=json_decode(json_encode($users),true)//它将返回数组中的数据
回声';打印(用户);

希望对我有所帮助

这在laravel 5.4中对我很有用

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

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

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

$foo = Bar::first(); // Get object
$foo = $foo->toArray(); // Convert object to array
使用
toArray()
方法将对象转换为数组:

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

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

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

(数组)$object

将转换

Array(
    [id] => 4
)

在尝试将数据从查询生成器传递到视图时遇到相同的问题。因为数据是作为对象来的。因此,您可以:

{{ $id }}
在你看来,你使用了如下变量

$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)
}
输出:


这个物体来自数据库吗?我没有使用过laravel,但可能它有一个API,可以生成关联数组而不是对象。不需要转换整个对象,然后将它们转换为另一个数组它来自DB..重复问题?我两种方法都试过了。。在非对象
@user3436481上调用成员函数toArray()时出现了相同的错误。您是否尝试过如我在回答中所示仅使用
(数组)
?您应该编辑您的问题,并展示如何准确地获取数据,以及如何使用数组转换从laravel数据库获取数据。。。它使用的是
std类
…数据完全相同…如果您正确使用Laravel,它使用的是模型对象和集合,而不是StdClassobjects@MarkBaker不,只有能言善辩的人才这样做。如果使用simple
Query\Builder
它会准确返回
stdObjects
数组(默认情况下,取决于数据库配置),我认为您应该在问题中添加一点,这将改变所有查询的获取模式,而不仅仅是此查询。但是很高兴知道它也可以通过这种方式更改是的,它将影响此请求的所有查询,除非您将其还原。您还可以编辑config/database.php,将“fect”=>PDO::FETCH_类替换为PDO::FETCH_assoct这在新的laravel上不再有效,因为版本5.4他们将其删除。第一行末尾有一个不必要的引号,这会破坏格式。它有效,谢谢
stdClass Object
(
    [id] => 4
)
Array(
    [id] => 4
)
$view = view('template', (array) $object);
{{ $id }}
$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)
}