Изменить формат массива JavaScript, если источником является PHP

0

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

  • 0
    «Нет цикла foreach, потому что я должен реализовать одно и то же во многих местах одного и того же проекта». Это само по себе не аргумент против использования простого цикла для этого, а для превращения его в функцию.
  • 0
    я могу ошибаться, потому что я не очень хорошо знаком с Laravel, но ваша проблема, кажется, дерзкая () . сама коллекция будет в ключе / значении, если вам нужно сузить результаты, возможно, map () - правильная функция.
Показать ещё 1 комментарий
Теги:
jquery-ui-autocomplete

2 ответа

0
Лучший ответ

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

   function convert($arr) { 
       $tmp = array();
       foreach ($arr as $k => $v) {
          $tmp[] = array("id" => $k, "value" => $v)
       }
       return $tmp;
    }
  • 0
    Это намного лучше и прекрасно вписывается в мой код. И тебе спасибо
2

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

$companies = Companies::select('company_name', 'id')->get()->toArray();
  • 0
    Огромное спасибо. Это завершает всю мою работу за считанные секунды.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню