JavaScript: массив объектов - и побыстрее!
<script>
var arr_locations = new Array;
<?
if(not_empty_array($arr_areas))
{
$i=0;
foreach($arr_areas as $area)
{
echo "arr_locations[".$i."] = new Object;";
echo "arr_locations[".$i."]['lat'] = ".$area["lat"].";";
echo "arr_locations[".$i."]['lng'] = ".$area["lng"].";";
echo "arr_locations[".$i."]['rad'] =
".$area["radius"].";";
$i++;
}
}
?>
</script>
Т.е. на выходе имели следующее:
<script>
var arr_locations = new Array;
arr_locations[0] = new Object;
arr_locations[0]['lat'] = 1.14;
arr_locations[0]['lng'] = 2.1415;
arr_locations[0]['rad'] = 3.141592;
arr_locations[1] = new Object;
arr_locations[1]['lat'] = 4.14;
arr_locations[1]['lng'] = 5.1415;
arr_locations[1]['rad'] = 6.141592;
</script>
Потом снова руки зачесались что-то здесь заоптимизировать.
Основная мысль, которая не давала покоя - зачем явно
указывать последовательно увеличивающийся индекс $i.
И я вспомнил. Массивы в JavaScript можно определять так:
var arr = [1, 2345, 666, 765];
А объекты - так:
var obj = {name: 'vasya', age: 25, sex: male};
Получилась более красивая каша:
<script>
var arr_locations = [
<?
if(not_empty_array($arr_areas))
{
$lines=array();
foreach($arr_areas as $area)
$lines[] = sprintf(
"\n{lat:%f,lng:%f,rad:%f}",
$area["lat"],
$area["lng"],
$area["radius"]);
echo implode(",", $lines);
}
?>
];
</script>
А теперь всё выглядит так (надо полагать, меньше весит = быстрее грузится, особенно при больших объёмах данных):
<script>
var arr_locations=[
{lat:1.14,lng:2.1415,rad:3.141592},
{lat:4.14,lng:5.1415,rad:6.141592}
];
</script>
Есть ещё над чем поработать - имена полей объекта всё время повторяются... Но это уже в другой раз.
3 комментов:
А utf8 поддерживает?
скрипт
var jsa =
пхп
$a = array (blablabla); //любой массив;
echo json_encode($a);
/пхп
/скрипт
ps думаю разборчиво, не разрешает теги ипользовать пхи и скрипта
Отправить комментарий