Изменить формат массива JavaScript, если источником является PHP - PullRequest
0 голосов
/ 10 октября 2018

В настоящее время я работаю над 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, потому что я должен реализовать одно и то же во многих местах одного и того же проекта.

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Функция pluck форматирует данные таким образом, первый параметр является ключом значения, а второй - значением ключа.Если вам нужны пары ключ-значение, вы должны использовать select.

$companies = Companies::select('company_name', 'id')->get()->toArray();
0 голосов
/ 10 октября 2018

Почему бы не реализовать функцию для выполнения работы, а затем вызвать функцию перед json_encode:

   function convert($arr) { 
       $tmp = array();
       foreach ($arr as $k => $v) {
          $tmp[] = array("id" => $k, "value" => $v)
       }
       return $tmp;
    }
...