2014-10-03 12 views
15

Laravel Ausgabe an Array-Objekt:Convert Laravel

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

    ) 

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

    ) 

) 

Ich möchte diese in normale Array konvertieren. Ich möchte nur das stdClass Object entfernen. Ich habe auch versucht ->toArray(); verwenden, aber ich erhalte eine Fehlermeldung:

Call to a member function toArray() on a non-object.

Wie kann ich dieses Problem beheben?

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

+0

hat dieses Objekt aus der DB kam? Ich habe Laravel nicht benutzt, aber vielleicht habe ich eine API, die ein assoziatives Array anstelle von Objekten ergibt. keine Notwendigkeit, das ganze Objekt zu konvertieren und dann in ein anderes Array zu übertragen – Ghost

+0

ja es kam von DB .. –

+0

Frage duplizieren? http://stackoverflow.com/questions/28658891/converting-object-to-array-in-laravel/35414167#35414167 –

Antwort

33

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

Sie können Ihre db Config ändern, wie @Varun vorgeschlagen, oder wenn Sie es nur in diesem Fall tun wollen, dann:

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

Ich denke, dass Sie zu Ihrer Frage hinzufügen sollten, ändert dies den Abrufmodus für alle Abfragen nicht nur für diesen. Aber schön zu wissen, dass es auch auf diese Weise geändert werden kann. –

+0

Ja, es betrifft alle Anfragen für diese Anfrage, es sei denn, Sie haben es rückgängig gemacht. Bearbeitet, um es klar zu machen. –

+0

Sie können auch config/database.php bearbeiten, ersetzen 'fecth = = PDO :: FETCH_CLASS zu PDO :: FETCH_ASSOC –

1

Sie benötigen

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

ans verwenden (array) Umwandlung über das Array zu durchlaufen, weil Sie Array von Objekten von Std Klasse haben und sich das Objekt nicht

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; 

Ausgang 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 stdClass wurde in Array konvertiert.

+0

ich versuchte beide Methoden .. selbe Fehler 'Aufruf an eine Member-Funktion toArray() auf einem Nicht-Objekt ' –

+0

@ user3436481 Haben Sie versucht, nur' (Array) 'wie ich in meiner Antwort gezeigt? Sie sollten Ihre Frage bearbeiten und zeigen, wie genau Sie Daten erhalten und wie Sie Array-Konvertierung verwenden –

+0

Ich bekomme Daten von Laravel-Datenbank ... es verwendet 'Std-Klasse' ... Daten sind genau das gleiche .... –

7

Sie können auch alle das Ergebnis immer als Array erhalten, indem

// application/config/database.php 

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

Hoffnung zu ändern, das wird helfen.

+0

danke das hilft sehr .... – John

+0

funktionierte wie, was ich brauchte. – ni3aj

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

Oder wenn toArray() versagt, weil es ein stdClass ist

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

Nicht funktioniert? Vielleicht können Sie Ihre Antwort finden Sie hier:

Convert PHP object to associative array

0

Ich schlage vor, Sie einfach diese Methode in Ihrem tun

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

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

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

Mit dieser alles, was Sie brauchen, ist die Zeichenfolge ‚Array‘ als Argument übergeben und Voila! Ein assoziatives Array wird zurückgegeben.

+0

Es gibt ein unnötiges Anführungszeichen am Ende der ersten Zeile und das bricht die Formatierung. – zennin

5

dies für mich gearbeitet:

$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()); 
0

Wenn Sie nur ID in Array zu erhalten, können array_map verwenden:

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

Damit Rückkehr ein Array mit ID in jeder Pos.

0

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

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

Hoffe, es hilft