Преобразование объекта php в массив javascript - PullRequest
0 голосов
/ 15 мая 2018

У меня есть функция selectAll, которая возвращает результаты в виде объектов.

$customers = $app['database']->selectAll('customers');

Вот переменная var_dump для $ Customers на всякий случай:

array(4) { 
    [0]=> object(stdClass)#5 (7) { ["id"]=> string(2) "10" ["name"]=> string(10) "Thisted El" ["address"]=> string(13) "Otto Monsteds" ["city"]=> string(5) "Vej 8" ["phone"]=> string(9) "503982350" ["zip"]=> string(6) "481922" ["notes"]=> string(0) "" } 
    [1]=> object(stdClass)#6 (7) { ["id"]=> string(2) "11" ["name"]=> string(11) "Bibin Vinod" ["address"]=> string(8) "Kottayam" ["city"]=> string(5) "Kochi" ["phone"]=> string(10) "0294294022" ["zip"]=> string(6) "129042" ["notes"]=> string(0) "" }
} 

Мне нужно использовать свойство 'name' этих объектов для формы автозаполнения. Я использую скрипт автозаполнения в по этой ссылке .

В моем php-файле я добавил вышеупомянутую функцию автозаполнения после формы. Затем я использую json_encode для этого объекта, за которым следует JSON.parse. Я использую цикл, чтобы добавить только имена в массив javascript, и, наконец, я передаю его в функцию автозаполнения.

var js_data = '<?php echo json_encode($customers); ?>';

var js_obj = JSON.parse(js_data);

for (var i = 0; i < arrayLength; i++) 
{
   customername[i] = js_obj["name"];
}

autocomplete(document.getElementById("customers"), customername);

Однако форма автозаполнения не работает. Я хотел бы помочь по этому вопросу. Благодарю.

Ответы [ 3 ]

0 голосов
/ 15 мая 2018

js_obj - это массив, вам нужно его проиндексировать.

customername[i] = js_obj[i].name;

Вы также можете просто создать массив имен в PHP.

$customers = array_map(function($x) {
    return $x->name;
}, $app['database']->selectAll('customers'));

?>
var customers = <?php echo json_encode($customers; ?>;
0 голосов
/ 16 мая 2018

Я исправил проблему. Сначала я преобразовал массив объектов в обычный массив в PHP:

$customers = $app['database']->selectAll('customers');

$allCustomers = array();

foreach($customers as $key => $val) 
{
    $allCustomers[] = $val;
}

Затем в части javascript я использовал json encode для этой переменной и использовал цикл for, чтобы добавить каждое свойство 'name' в массив javascript, и, наконец, передал его функции автозаполнения аналогично:

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

var customername = [];

for (var i = 0; i < js_data.length; i++) 
{
    customername[i] = js_data[i]["name"];
}

autocomplete(document.getElementById("customers"), customername);

Большое спасибо всем за вашу помощь.

0 голосов
/ 15 мая 2018

Поскольку вам просто нужно изменить входное значение вместо DOM DOM

document.getElementById("customers").value = customername;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...