Материализовать автозаполнение CSS из XML

Я пытаюсь разобрать XML в PHP, а затем поместить его как объект в JavaScript для материализации автозаполнения CSS.

Я попытался разобрать его на PHP и поместить как объект в JavaScript с помощью json_encode($array) Но это не сработало. Автозаполнение показывает только цифры.

Вы должны поместить данные как объект в «данные». И это должно быть так, как "string": 'http://url' URL-адрес миниатюры. Но я хочу как "string": null. Так что миниатюры не будет.

Это пример из документации Materialise CSS: https://materializecss.com/autocomplete.html

  $(document).ready(function(){
    $('input.autocomplete').autocomplete({
      data: {
        "Apple": null,
        "Microsoft": null,
        "Google": 'https://placehold.it/250x250'
      },
    });
  });

Мой XML-файл:

<tittle>

<topic>
<name>PHP</name>
</topic>

<topic>
<name>JS</name>
</topic>

<topic>
<name>CSS</name>
</topic>

</tittle>

Мой код:

<!DOCTYPE html>
<html lang = "en" >

<head>
 <meta charset = "UTF-8">
 <link rel = "stylesheet" href = "https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">
 <link rel='stylesheet' href='https://fonts.googleapis.com/icon?family=Material+Icons'>  
</head>

<body>

    <div class = "row">
    <div class = "col s12">
      <div class = "row">
        <div class = "input-field col s12">
          <i class = "material-icons prefix">textsms</i>
          <input type = "text" id = "autocomplete" class = "autocomplete">
          <label for = "autocomplete">Autocomplete</label>
        </div>
      </div>
    </div>
  </div>
  <script src = "https://code.jquery.com/jquery-3.3.1.min.js"></script>
 <script src = "https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>



  <?php

  $xml = simplexml_load_file("xml.xml");

  $array = array();

  foreach($xml->topic as $topic)
  {
    $array[] = $topic->name;  
  }

  ?>


    <script >
    var array = <?php echo json_encode($array); ?>;
    console.info(array); 

  $(function () {
  $('input.autocomplete').autocomplete({
    data: array     

  });
});

</script>  
</body>  
</html>

Вывод console.info(array);:

Материализовать автозаполнение CSS из XML

Автозаполнение отображает только цифры (0-2). Я думаю, что эти числа являются индексами массива.

Я думаю, что я должен изменить структуру массива на "string_from_array": null

Есть ли способ, как это сделать? Спасибо за ответ

Вы спросили об этом - stackoverflow.com/questions/54738061/…, который теперь удален, и вы спрашиваете его снова.

Nigel Ren 18.02.2019 17:17

Я знаю, я плохо спросил.

Tomáš Soušek 18.02.2019 17:25
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
131
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы можете изменить строку

$array[] = $topic->name;

к

$array[$topic->name] = $topic->name;

это должно решить вашу проблему, но не лучший способ сделать это.

Спасибо за ответ, но он не работает. Там написано Warning: Illegal offset type in C:\xampp\htdocs\help\index.php on line 36. И в console.info(array); ничего нет

Tomáš Soušek 18.02.2019 17:12
$array[$topic->name] = $topic->name; -> $array[(string)$topic->name] = (string)$topic->name;
Nigel Ren 18.02.2019 17:24

Пытаться:

foreach($xml->topic as $topic)
   {
   $array[$topic->name] = null;  
   }
$array[$topic->name] = null; должен быть $array[(string)$topic->name] = null;
Nigel Ren 18.02.2019 17:26

Зачем это пробовать? Можете ли вы объяснить свой ответ так, чтобы другие могли извлечь из него уроки?

Nico Haase 18.02.2019 17:33

вы можете добавить функцию array_flip, чтобы поместить значения в ключи массива. Изменить эту строку

var array = <?php echo json_encode($array); ?>;

так это становится

var array = <?php echo json_encode(array_flip($array)); ?>;

Там написано: Warning: array_flip(): Can only flip STRING and INTEGER values! in C:\xampp\htdocs\help\index.php on line 43. И это не работает

Tomáš Soušek 18.02.2019 17:22

Другие вопросы по теме