Ваша проблема в том, что вы назначаете свои маркеры [z] для markerWeather [0] .. так что все назначено [0]
По крайней мере, это самая очевидная вещь, которую я могу заметить прямо сейчас ..
ОБНОВЛЕНИЕ
ОК Я думаю, я нашел проблему.Так как .getJson - это асинхронный вызов, метод уже вернулся, и ваш цикл for () уже изменил переменную 6 раз, когда первый асинхронный вызов возвращается для выполнения обратного вызова.
что вам нужно сделать, это:
var f = function(z) {
$.getJSON("http://free.worldweatheronline.com/feed/weather.ashx?q="+markers[z].lat+","+markers[z].lng+"&format=json" +"&num_of_days=1" + "&key=e678d973c7184412112807"+"&callback=?",function(jsonp){
$.each(jsonp.data.current_condition, function(i){
var time = this;
markerWeather[z] = new google.maps.Marker({
position: new google.maps.LatLng(markers[z].lat,markers[z].lng),
title: "Temp. " + markers[z].title + ": "+ time.temp_C + " grados",
map: mapa
});
});
});
}
for(z=0; z<=5; z++){
f(z);
}
Вызывая функцию на каждой итерации цикла, вы сохраняете переменную z через замыкание.