wake-up-neo.net

Konvertieren Sie das Laravel-Objekt in ein Array

Laravel-Ausgabe:

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

    )

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

    )

)

Ich möchte dieses in ein normales Array umwandeln. Ich möchte nur diesen stdClass Object entfernen. Ich habe auch versucht, ->toArray(); zu verwenden, bekomme aber einen Fehler:

Rufen Sie eine Memberfunktion toArray () für ein Nichtobjekt auf.

Wie kann ich das beheben?

Funktionalitäten wurden implementiert auf http://www.srihost.com

18
Your Friend

UPDATE seit Version 5.4 von Laravel ist es nicht mehr möglich.

Sie können Ihre Datenbankkonfiguration ändern, wie @Varun vorgeschlagen. Wenn Sie dies nur in diesem Fall tun möchten, gilt Folgendes:

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);
34
Jarek Tkaczyk
foreach($yourArrayName as $object)
{
    $arrays[] = $object->toArray();
}
// Dump array with object-arrays
dd($arrays);

Oder wenn toArray() fehlschlägt, weil es sich um eine stdClass handelt 

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

Funktioniert nicht? Vielleicht finden Sie hier Ihre Antwort:

Konvertiere PHP Objekt in ein assoziatives Array

22
mauricehofman

Sie können das Ergebnis auch immer als Array erhalten, indem Sie es ändern

// application/config/database.php

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

Hoffe das wird helfen.

7
Varun Varunesh

das hat für mich funktioniert:

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

oder 

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

das funktionierte für mich in laravel 5.4

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

ausgabe

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/api/5.4/Illuminate/Support/Collection.html#method_all

2
scandar

Sie müssen das Array durchlaufen

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

verwenden Sie (array)-Konvertierung, da Sie ein Array von Objekten der Klasse Std und nicht das Objekt selbst haben

Beispiel:

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

Ausgabe hierfür ist:

array(1) { [0]=> object(stdClass)#258 (8) { ["id"]=> int(1) ["user_name"]=> string(5) "admin" ["email"]=> string(11) "[email protected]" ["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) "[email protected]" ["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" } } 

wie erwartet. Das Objekt von stdClass wurde in ein Array umgewandelt.

1

Wenn Sie nur ID im Array abrufen möchten, können Sie array_map verwenden:

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

Rückgabe eines Arrays mit ID in jeder Position.

1
Ariel Ruiz

Es ist sehr einfach. Sie können wie folgt verwenden: -

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);

Ich hoffe es hilft

0
kunal

$ foo = Bar :: getBeers (); $ foo = $ foo-> toArray ();

0
Pablo Ramires

Für den Fall, dass noch jemand hierher kommt und nach einer Antwort sucht. Dies kann mit normalem PHP erfolgen. Eine einfachere Möglichkeit besteht darin, das Objekt umzukehren. 

function objectToArray(&$object)
{
    return @json_decode(json_encode($object), true);
}
0
Selay
$res = ActivityServer::query()->select('channel_id')->where(['id' => $id])->first()->attributesToArray();

Ich verwende get(), es gibt ein Objekt zurück, ich verwende attributesToArray(), um das Objektattribut in ein Array zu ändern.

0
张鹏飞

Ich schlage vor, Sie tun dies einfach innerhalb Ihrer Methode

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

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

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

Dazu müssen Sie nur die Zeichenfolge 'array' als Argument übergeben und Voila! Ein assoziatives Array wird zurückgegeben.

0
Dammy