У меня есть структура массива, возвращенная из выбора db laravel, которая выглядит следующим образом:
array:219 [▼
0 => {#236 ▼
+"mID": "101"
+"qAVG": "6.44444"
}
1 => {#235 ▼
+"mID": "102"
+"qAVG": "4.15068"
}
Помимо перебора всего массива и создания новой переменной, есть ли в PHP функция, которая может генерировать что-то вроде этого:
Array = array(
101 => array(
'qAVG' => 6.44444
),
101 => array(
'qAVG' => 4.15068
)
)






Да, для этого array_column есть функция, которая позволяет извлекать определенный элемент из многомерного массива и / или индексировать результат по определенному элементу. Так сделайте и то, и другое:
$result = array_column($array, 'qAVG', 'mID');
Если подмассивы содержат больше элементов, и вы тоже хотите их, просто переиндексируйте:
$result = array_column($array, null, 'mID');
Если вы не преобразовали в массив в Laravel, вы можете использовать функцию сбора pluck():
DB::table('foo')->select(['mID', 'qAVG'])->get()->pluck('qAVG', 'mID');
Первый аргумент - это то, что вытаскивать, второй - что использовать в качестве ключей. Он отлично подходит для заполнения раскрывающегося списка опций.
Как и в предыдущем комментарии, если вам нужны другие столбцы:
DB::table('foo')->get()->keyBy('mID');
Нет, невозможно иметь повторяющиеся ключи на одном уровне массива. (
101)