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

Я не знаю, был ли это лучший способ достичь результата, но он работает. Спасибо!

Другие вопросы по тегам