当源为 PHP 时更改 JavaScript 数组的格式

Change the format of JavaScript array when source is PHP

我目前正在 laravel 工作,我的项目要求我对下拉菜单使用自动完成功能。

但是从下面返回的对象

$companies = Companies::all()->pluck('company_name','id')->toArray();

并使用以下

转换为js数组
var companies = <?php echo json_encode($companies) ?>;

returns数组格式如下

{ 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 function formats the data that way, the first parameter is the value key and the second is the key value. If you want key value pairs, you should use select.

$companies = Companies::select('company_name', 'id')->get()->toArray();