В настоящее время я работаю над laravel, и мой проект требует, чтобы я использовал автозаполнение для выпадающих списков.
Тем не менее, объект возвращается из следующего
$companies = Companies::all()->pluck('company_name','id')->toArray();
и преобразован в массив js, используя следующие
var companies = <?php echo json_encode($companies) ?>;
возвращает следующий формат массива
{ 2: "Jadon Technology",
58: "Samsung",
59: "Sony",
60: "Sujan",
61: "Superman",
68: "Vivo",
84: "Iphone",
85: "Oppo",
}
Мне нужен массив, как показано ниже.
var companies = [
{ id: 2, value: "Jadon Technology"} ,
{ id: 58, value: "Samsung"} ,
{ id: 59, value: "Sony"} ,
{ id: 60, value: "Sujan"} ,
{ id: 61, value: "Superman"} ,
{ id: 68, value: "Vivo"} ,
{ id: 84, value: "Iphone"} ,
{ id: 85, value: "Oppo"} ,
];
Я делаю что-то неправильно или есть какой-либо другой способ преобразования в указанный формат? Пожалуйста, помогите мне. Приветствуются предложения, включая php/laravel/javascript. PS: нет цикла foreach, потому что я должен реализовывать то же самое во многих местах в одном проекте.
Почему бы не реализовать функцию для выполнения работы, а затем вызвать функцию перед json_encode:
function convert($arr) {
$tmp = array();
foreach ($arr as $k => $v) {
$tmp[] = array("id" => $k, "value" => $v)
}
return $tmp;
}
Функция pluck
форматирует данные таким образом, первый параметр - это ключ значения, а второй - значение ключа. Если вы хотите пары ключевых значений, вы должны использовать select
.
$companies = Companies::select('company_name', 'id')->get()->toArray();