You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将PHP查询的酒店数据转为Google Maps Infobox所需的JS格式

PHP侧数据处理

先将你从数据库查询得到的酒店数组整理为前端需要的结构,再转成JSON格式:

<?php
// 你的现有查询结果数组
$array_hotel = array();
// ... 你原有的数据库查询赋值逻辑 ...

$format_hotels = [];
foreach ($array_hotel as $idx => $hotel) {
    $format_hotels[] = [
        // 可根据实际业务修改详情页地址,比如拼接酒店ID生成动态路径
        'detail_url' => 'listing-single.html',
        'img' => $hotel['image'],
        'name' => $hotel['hotelname'],
        'address' => $hotel['address'],
        'price' => '$ ' . $hotel['amount'],
        'star_rating' => $hotel['rate'],
        'lat' => $hotel['latitude'],
        'lng' => $hotel['longitude'],
        'sort' => $idx
    ];
}
// 转JSON时加参数避免引号冲突
$hotel_json = json_encode($format_hotels, JSON_HEX_QUOT | JSON_UNESCAPED_UNICODE);
?>

前端JS生成目标数组

分两种场景处理:

场景1:JS代码写在PHP页面中

直接将PHP输出的JSON赋值给JS变量,遍历生成locations数组:

// 接收PHP输出的酒店数据
const hotelList = <?php echo $hotel_json; ?>;
const imagepath = $('#img_path').val();
// 此处替换为你实际的markerIcon定义
const markerIcon = '你的标记图标路径';

function locationData(locationURL, locationImg, locationTitle, locationAddress, locationPrice, locationStarRating) {
    return ('<div class="map-popup-wrap"><div class="map-popup"><div class="infoBox-close"><i class="far fa-times"></i></div><a href="' + locationURL + '" class="listing-img-content fl-wrap"><img src="' + locationImg + '" alt=""><span class="map-popup-location-price"><strong>Awg/Night</strong>' + locationPrice + '</span></a> <div class="listing-content fl-wrap"><div class="card-popup-raining map-card-rainting" data-staRrating="' + locationStarRating + '"></div><div class="listing-title fl-wrap"><h4><a href=' + locationURL + '>' + locationTitle + '</a></h4><span class="map-popup-location-info"><i class="fas fa-map-marker-alt"></i>' + locationAddress + '</span></div></div></div></div>')
}

// 生成符合要求的locations数组
const locations = hotelList.map(hotel => {
    // 如果你的图片需要拼接前端imagepath,把hotel.img改成 imagepath + hotel.img 即可
    return [
        locationData(hotel.detail_url, hotel.img, hotel.name, hotel.address, hotel.price, hotel.star_rating),
        parseFloat(hotel.lat),
        parseFloat(hotel.lng),
        hotel.sort,
        markerIcon
    ]
})

场景2:JS代码为独立的外部文件

先在HTML页面中添加隐藏域存储JSON数据:

<input type="hidden" id="hotel_data" value='<?php echo $hotel_json; ?>'>

再在JS文件中读取隐藏域的值解析后使用:

const hotelList = JSON.parse($('#hotel_data').val());
// 后续生成locations数组的逻辑和场景1完全一致

注意事项

  • 若需要动态生成酒店详情页地址,可在PHP遍历阶段根据酒店的唯一ID拼接,比如'detail_url' => 'listing-single.html?hotel_id=' . $hotel['id']
  • 价格的单位、符号可根据业务需求自行调整格式
  • 经纬度在前端做parseFloat转换,避免地图插件识别字符串类型出错

内容的提问来源于stack exchange,提问作者Franco Ramonda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 01:24:02