Я пытаюсь разобрать 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);:

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



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете изменить строку
$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); ничего нет
$array[$topic->name] = $topic->name; -> $array[(string)$topic->name] = (string)$topic->name;Пытаться:
foreach($xml->topic as $topic)
{
$array[$topic->name] = null;
}
$array[$topic->name] = null; должен быть $array[(string)$topic->name] = null;Зачем это пробовать? Можете ли вы объяснить свой ответ так, чтобы другие могли извлечь из него уроки?
вы можете добавить функцию 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. И это не работает
Вы спросили об этом - stackoverflow.com/questions/54738061/…, который теперь удален, и вы спрашиваете его снова.