Как мне вернуть формат массива вместо массива объектов?

#laravel

#laravel

Вопрос:

У меня есть код Laravel 6, который ниже отображает массив с форматом объекта. Поэтому мне нравится отображать вместо массива на основе объектов просто массив, как я упоминал ниже.

  $ins_affiliations =   DB::table('ins_affiliations as af')
                ->select('af.id','af.name')               
                ->where(['af.ins_category_id' => $ins_category_type[0]->category_id])
                ->get()->toArray(); 
  

мой код показывает

   Array
(
    [0] => stdClass Object
        (
            [id] => 12
            [name] => NSDC
        )

    [1] => stdClass Object
        (
            [id] => 13
            [name] => NCVT
        )

    [2] => stdClass Object
        (
            [id] => 14
            [name] => AICTE
        )

    [3] => stdClass Object
        (
            [id] => 15
            [name] => Others
        )

)
  

что мне нужно

 Array
(    
    [12] => NSDC
    [5] => NCVT
    [8] => AICTE
    [11] => Others   
)
  

Как я могу этого добиться?

Комментарии:

1. Вам нужен json_decode

2. Вы можете использовать pluck('name', 'id') вместо get() этого для выполнения вашего запроса

3. @sta json_decode работает не так, как я ожидал

Ответ №1:

Вы можете удалить ->toArray() при извлечении данных, а затем использовать mapWithKeys, который является методом сбора

 $ins_affiliations->mapWithKeys(function ($item) { return [$item->id => $item->name]; })
  

Затем вы можете использовать ->all() , если хотите получить обычный массив