Преобразование объекта laravel в массив

Выход Laravel:

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

    )

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

    )

)

Я хочу преобразовать это в обычный массив. Просто удалите это stdClass Object. Я также попытался использовать ->toArray();, но я получаю сообщение об ошибке:

Вызов функции-члена toArray() для не-объекта.

Как я могу это исправить?

Функциональные возможности реализованы на http://www.srihost.com

Ответы

Ответ 1

Вы можете изменить свою конфигурацию db, например, предложенную @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);

Ответ 2

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 в ассоциативный массив

Ответ 3

Вы также можете получить весь результат всегда как массив, изменив

// application/config/database.php

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

Надеюсь, это поможет.

Ответ 4

это сработало для меня:

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

Ответ 5

Вам нужно выполнить итерацию по массиву

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) "[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" } } 

как ожидалось. Объект stdClass был преобразован в массив.

Ответ 6

Я предлагаю вам просто сделать это в своем методе

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

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

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

С этим вам нужно передать строку "array" в качестве вашего аргумента и Voila! Возвращается ассоциативный массив.

Ответ 7

Если вы хотите получить только ID в массиве, можете использовать array_map:

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

При этом возвратите массив с идентификатором в каждом столбце.