2016-11-14 64 views
1

我试图找出如何将一个PHP数组到JSON,对象的JavaScript数组的数组JS:PHP json_encode到对象

$latlng = array(); 
    $properties = get_posts(array(
     'posts_per_page' => -1, 
     'post_type' => array('house', 'townhouse', 'condo'), 
     'status' => 'publish' 
    )); 
    foreach ($properties as $prop) { 
     $lat = get_field('latitude', $prop, false); 
     $lng = get_field('longitude', $prop, false); 
     array_push($latlng, array($lat, $lng)); 
    } 

    echo json_encode($latlng); 
    wp_die(); 

但我需要最终JS数组的样子这样的:

locations = [ 
        {lat: -31.563910, lng: 147.154312}, 
        {lat: -33.718234, lng: 150.363181}, 
        {lat: -33.727111, lng: 150.371124}, 
        {lat: -33.848588, lng: 151.209834}, 
        {lat: -33.851702, lng: 151.216968}, 
        {lat: -34.671264, lng: 150.863657}, 
        {lat: -35.304724, lng: 148.662905}, 
        {lat: -36.817685, lng: 175.699196}, 
        {lat: -36.828611, lng: 175.790222}, 
        {lat: -37.750000, lng: 145.116667}, 
        {lat: -37.759859, lng: 145.128708}, 
        {lat: -37.765015, lng: 145.133858}, 
        {lat: -37.770104, lng: 145.143299}, 
        {lat: -37.773700, lng: 145.145187}, 
        {lat: -37.774785, lng: 145.137978}, 
        {lat: -37.819616, lng: 144.968119}, 
        {lat: -38.330766, lng: 144.695692}, 
        {lat: -39.927193, lng: 175.053218}, 
        {lat: -41.330162, lng: 174.865694}, 
        {lat: -42.734358, lng: 147.439506}, 
        {lat: -42.734358, lng: 147.501315}, 
        {lat: -42.735258, lng: 147.438000}, 
        {lat: -43.999792, lng: 170.463352} 
       ] 

这让我可以使用locations.map(function(location, i) {遍历范围。

回答

4

您的$latlng是一个数组数组,您希望您的JSON成为一个对象数组,其中latlng字段。所以,你需要做的:

$latlng = array(); 
$properties = get_posts(array(
    'posts_per_page' => -1, 
    'post_type' => array('house', 'townhouse', 'condo'), 
    'status' => 'publish' 
)); 
foreach ($properties as $prop) { 
    $lat = get_field('latitude', $prop, false); 
    $lng = get_field('longitude', $prop, false); 
    array_push($latlng, array('lat' => $lat, 'lng' => $lng)); 
} 

echo json_encode($latlng, JSON_NUMERIC_CHECK /* PHP >= 5.3.3 */); 
wp_die(); 

我们只是把一个对象,而不是包含值的数组:

array_push($latlng, array('lat' => $lat, 'lng' => $lng));

希望它能帮助。

+0

这确实帮了我很大忙。感谢您指出我忘记添加的内容。但是,我如何将“纬度”和“经度”保留为数字,而不是转换为字符串? – dcolumbus

+0

您可以使用'JSON_NUMERIC_CHECK'选项,如更新后的答案中所示。 – karliwson