Здравствуйте Столкнулся с проблемой: есть такой скрипт. Код (Text): <script type='text/javascript'> function doAddContainer() { obj = { name: "tile002", thumbnail: "images/widget_scroll.png", content: "tile001", url: "tiles/blank.php", size: "4x2", theme: "orange", link: "" }; tile = { size: "4", theme: "container2", name: "container2", tiles: obj }; var cc = document.getElementById('plugin_textarea_string'); tiles = cc.value; tile_containers = unserialize(tiles); tile_containers[tile_containers.length] = tile; document.getElementById('plugin_textarea_string').value = serialize(tile_containers); } </script> у него на входе следущая строка из php: a:1:{i:0;a:4:{s:4:"size";s:1:"4";s:5:"theme";s:10: "container1";s:4:"name";s:10:"container1";s:5:"til es";a:1:{i:0;a:7:{s:4:"name";s:7:"tile001";s:9:"th umbnail";s:24:"images/widget_scroll.png";s:7:"content";s:7:"tile001";s:3 :"url";s:15:"tiles/blank.php";s:4:"size";s:3:"4x2";s:5:"theme";s:6:"o range";s:4:"link";s:0:"";}}}} скрипт должен добавить в составной массив ещё один объект и отправить его в php, соорудив вот такую "правильную" строку: a:2:{i:0;a:4:{s:4:"size";s:1:"4";s:5:"theme";s:10: "container1";s:4:"name";s:10:"container1";s:5:"til es";a:1:{i:0;a:7:{s:4:"name";s:7:"tile001";s:9:"th umbnail";s:24:"images/widget_scroll.png";s:7:"content";s:7:"tile001";s:3 :"url";s:15:"tiles/blank.php";s:4:"size";s:3:"4x2";s:5:"theme";s:6:"o range";s:4:"link";s:0:"";}}}i:1;a:4:{s:4:"size";s: 1:"4";s:5:"theme";s:10:"container2";s:4:"name";s:1 0:"container2";s:5:"tiles";a:1:{i:0;a:7:{s:4:"name ";s:7:"tile002";s:9:"thumbnail";s:24:"images/widget_scroll.png";s:7:"content";s:7:"tile001";s:3 :"url";s:15:"tiles/blank.php";s:4:"size";s:3:"4x2";s:5:"theme";s:6:"o range";s:4:"link";s:0:"";}}}} но получается вот такая "неправильная": a:2:{i:0;a:4:{s:4:"size";s:1:"4";s:5:"theme";s:10: "container1";s:4:"name";s:10:"container1";s:5:"til es";a:1:{i:0;a:7:{s:4:"name";s:7:"tile001";s:9:"th umbnail";s:24:"images/widget_scroll.png";s:7:"content";s:7:"tile001";s:3 :"url";s:15:"tiles/blank.php";s:4:"size";s:3:"4x2";s:5:"theme";s:6:"o range";s:4:"link";s:0:"";}}}i:1;a:4:{s:4:"size";s: 1:"4";s:5:"theme";s:10:"container2";s:4:"name";s:1 0:"container2";s:5:"tiles";a:7:{s:4:"name";s:7:"ti le002";s:9:"thumbnail";s:24:"images/widget_scroll.png";s:7:"content";s:7:"tile001";s:3 :"url";s:15:"tiles/blank.php";s:4:"size";s:3:"4x2";s:5:"theme";s:6:"o range";s:4:"link";s:0:"";}}} как получается "правильная" строка в php: Код (Text): $str = serialize( array( array ( 'size' => '4', 'theme' => 'container1', 'name' => 'container1', 'tiles' => array( array( 'name' => 'tile001', 'thumbnail' => 'images/widget_scroll.png', 'content' => 'tile001', 'url' => 'tiles/blank.php', 'size' => '4x2', 'theme' => 'orange', 'link' => '' ) ) ), array ( 'size' => '4', 'theme' => 'container2', 'name' => 'container2', 'tiles' => array( array( 'name' => 'tile002', 'thumbnail' => 'images/widget_scroll.png', 'content' => 'tile001', 'url' => 'tiles/blank.php', 'size' => '4x2', 'theme' => 'orange', 'link' => '' ) ) ) ) ); пользовательские функции serialize и unserialize работают корректно. убирал эту строку tile_containers[tile_containers.length] = tile; и давал на вход скрипта от php "правильную" строку. После парсинга в обе стороны она остаётся такой же. Собственно вопрос: как всё-таки получить при работе скрипта "правильную". Просьба не предлагать решить проблему при помощи JSON, так как это создаст массу других
т.е. получить корректную строку в js невозможно? Добавлено спустя 28 минут 21 секунду: Проблема решена: Код (Text): <script type='text/javascript'> function doAddContainer() { obj = { name: "tile002", thumbnail: "images/widget_scroll.png", content: "tile001", url: "tiles/blank.php", size: "4x2", theme: "orange", link: "" }; objobj = { obj: obj }; tile = { size: "4", theme: "container2", name: "container2", tiles: objobj }; var cc = document.getElementById('plugin_textarea_string'); tiles = cc.value; tile_containers = unserialize(tiles); tile_containers[tile_containers.length] = tile; document.getElementById('plugin_textarea_string').value = serialize(tile_containers); } </script>
Например Json вложенные массивы вместо array частенько делает stdClass object. Придётся вылавливать в чужом коде все подобные места. Проще добить то, что есть. А с нуля - разумеется я бы использовал Json
Код (PHP): $array = [ 'firstLevel' => [ 'secondLevel1' => 'value1', 'secondLevel2' => 'value1' ] ]; $json = json_encode($array); /* stdClass */ print_r(json_decode($json)); /* array */ print_r(json_decode($json, true));