1

I'm trying to figure out how to translate a PHP array to json, to a javascript array of objects:

$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();

But I need the final JS array to look like this:

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}
                ]

This is so I can use locations.map(function(location, i) { to iterate over the bounds.

1 Answer 1

4

Your $latlng is an array of arrays, and you want your JSON to be an array of objects, with lat and lng fields. So you need to do:

$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();

We just pushed an object instead of an array containing the values:

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

Hope it helps.

2
  • This does help me a lot. Thanks for pointing out what I forgot to add. However, how I retain the latitude and longitude as numbers, and not converted to strings? Commented Nov 15, 2016 at 17:16
  • You can use the JSON_NUMERIC_CHECK option, as seen in the updated answer. Commented Nov 15, 2016 at 17:26

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.