PHP массив в JSON, имеющий параметр с функцией обратного вызова
В моем PHP-скрипте у меня есть массив, похожий на этот:
$panorama = array(
"default" => array(
"firstScene" => 2,
"author" => 'Felipe'
),
"scenes" => array(
"circle" => array(
"title" => "Title 1",
"hotSpots" => array(
"pitch" => "-2.1",
"createTooltipFunc" => "hotspot"
)
)
)
);
Этот массив будет передан в функцию Javascript, как объект json, например:
pannellum.viewer('panorama', <?php echo json_encode($panorama); ?>);
Параметр createTooltipFunc должен получить функцию обратного вызова с именем hotspot. Итак, в последнем json, когда я передаю этот массив PHP в функцию Javascript, этот параметр должен выглядеть следующим образом: "createTooltipFunc": hotspot, без двойных кавычек. Как я могу это сделать?
Просто чтобы дать больше информации, я пытаюсь создать тур, используя плагин pannellum.js, и я получаю всю информацию о json, которая мне нужна, из моей базы данных mysql.
2 ответа
Держите переменную Javascript, которая хранит объект и обновляет свойство, прежде чем использовать его с pannellum(Предполагается, hotspot
является переменной).
// create Javascript object
var obj = <?php echo json_encode($panorama); ?>;
// update createTooltipFunc proeprty with the variable
// where variable name can be extract from $panorama
obj.scenes.circle.hotSpots.createTooltipFunc = <?php echo $panorama['scenes']['circle']['hotSpots']['createTooltipFunc']; ?>;
pannellum.viewer('panorama', obj);
Следуя предложению Pranav, мне пришлось поместить массив PHP в объект javascript и пройти через него, чтобы найти нужный узел, а затем заменить старое значение на новое, что-то вроде этого:
var objTour = <?php echo json_encode($panorama); ?>;
for (var [key, value] of Object.entries(objTour.scenes)) {
var objdadosScene = value;
for (var [key, value] of Object.entries(objdadosScene)) {
if(key == 'hotSpots'){
var objHotspot = objdadosScene.hotSpots;
for (var [key, value] of Object.entries(objHotspot)) {
var objDadosHotspot = value;
for (var [key, value] of Object.entries(objDadosHotspot)) {
objDadosHotspot['createTooltipFunc'] = hotspot;
}
}
}
}
}
Я не знаю, был ли это лучший способ достичь результата, но он работает. Спасибо!