2016-11-14 3 views
1

Я пытаюсь выяснить, как перевести PHP массив JSON, в яваскрипта массив объектов:PHP json_encode в JS массив объектов

$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 был массивом объектов, с полями lat и lng. Так что вам нужно сделать:

$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

Смежные вопросы