Создание списка из полей и ключей многомерного массива
Добрый вечер! Решаю проблему формирования списка-дерева.
Имеется к примеру такой массив:
$mas = array ( "City" => array ( "a" => "New-York",
"b" => "London",
"c" => "Moscow"
),
"Numbers" => array ( "element-1",
"element-2",
"element-3",
"element-4",
"element-5",
"element-6"
),
"Other" => array ( "one",
5 => "two",
"three",
7=> array ("mas10", "mas15")
)
);
После преобразования в JSON-формат массив выглядит так: Код:
{Код:
function Dump(d,l) А хотелось бы сделать так чтобы заголовки элементов которые являются массивами в свою очередь (как например "City" или "7") показывали свои заголовки, а элементы которые просто хранят значения не показывали свои заголовки (такие как ключ "a", "5" или просто значения без указанного ключа как к примеру "element-3", "mas15" и т.д.). Как это сделать? Пробовал выводить значения k в цикле, но оно выводит аболютно все ключи, даже которые не являются массивами. |
Цитата:
Вот это будет правильнее!
var obj = {
"City": {
"a": "New-York",
"b": "London",
"c": "Moscow"
},
"Numbers": ["element-1", "element-2", "element-3", "element-4", "element-5", "element-6"],
"Other": {
"0": "one",
"5": "two",
"6": "three",
"7": ["mas10", "mas15"]
}
};
А вот что из этого нужно получить - пока не ясно... :) Ты сам руками можешь сделать нужных хтмл по этой структуре? Вот и сделай. Потом покажи тут... |
Я показал код JSON который получился в результате преобразования из массива php. Тут все правильно.
Просто в файле php применил: echo json_encode($mas); И если выполнять эту страницу, то на вывод подается как раз массив JSON. Код:
{http://www.imgup.ru/image-12jrx7161953.html только с небольшой разницей, чтобы папки тоже были подписаны. (а папки у нас это название ключей, содержащие в своих значениях подмассивы). Помогите эту проблему решить! |
Цитата:
<!DOCTYPE html>
<html>
<head>
<!--
<script src="http://code.jquery.com/jquery-latest.js"></script>
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
</style>
<script type="text/javascript">
var obj={
"City":{"a":"New-York","b":"London","c":"Moscow"},
"Numbers" ["element-1","element-2","element-3","element-4","element-5","element-6"],
"Other":{"0":"one","5":"two","6":"three","7":["mas10","mas15"]}
};
</script>
</head>
<body>
</body>
</html>
Цитата:
|
Цитата:
Т.к. не понятно, что будет "папкой", а что "текстом"... Нужно правильное сочетание объектов и массивов. Т.о. можно будет сделать элемент объекта папкой, а элементы массива - текстом. Сейчас у тебя какая-то каша из объектов и массивов, причем синтаксически не верная... |
Я не вижу визуальных отличий между моим массивом и твоим, с единственной разницей что ты его обрамил еще в скобки и присвоил переменной obj. Не знаю как у вас у меня на сервере массив php, преобразовывается в JSON-структуру. А затем через AJAX передается на главную страницу, а там в скрипте уже идет вызов функции Dump:
$(function() {
var str = "";
$.getJSON("controller.php", {}, function(data){
str = Dump(data,1);
$("#span2").html(str);
});
});
И картинку посмотрите мою, у меня же формируются успешно данные из массива, значит все в порядке. Единственное, что нужно проименовать название папок. Этого я не знаю как сделать. |
Почему каша-то? У меня элементы которые не содержат массивов отображаются как "файлы", а элементы которые содержат массивы выглядят как "папки". Это мне и надо. Единственное, что нужно подписать заголовки "папкам" - т.е. вывести название ключей, которые содержат подмассивы. Тоесть на первом уровне папок надо подписать их "City", "Numbers", "Other", на втором уровне только одну папку "7" содержащую массив ["mas10","mas15"].
|
Цитата:
|
Ну это же не я сам его составил, во-первых, это php-код превратил из php-массива в JSON-структуру, он думаю ошибаться не будет. А, во-вторых, у меня нет ошибок с массивом, какие вы показывали мне. У меня проблема совсем в другом, чтобы подписать папки названиями ключей.
|
Цитата:
Вызов у тебя Dump(d[k],l+1) Сделай так (порядок параметров на твое усмотрение) Dump(d[k],l+1,k) тогда у тебя будет "текст" самого свойства. Т.е. та самая подпись к папке. ;) Первый вызов будет такой str = Dump(data,1,'data'); |
Цитата:
Цитата:
ваш вариант работать не будет... |
Тоесть так что ли сделать?:
function Dump(d,l,name)
{
if (l == null) l = 1;
var s = '';
if (typeof(d) == "object")
{
s += "<li><img src='../images/folder.gif' />"+name;
for (var k in d)
{
s += "<ul>" + Dump(d[k],l+1,k)+"</ul>";
}
s += "</li>";
}
else
{
s += "<li><img src='../images/file.gif' />" + d + "</li>";
}
return s;
}
str = Dump(data,1, "Корень");
$("#span2").html(str);
|
Все получилось!!!) Спасибо). Я как-то про третий параметр не подумал).
Вот ссылка на дерево которое теперь строется у меня в html: http://www.imgup.ru/image-12knx501155.html |
Цитата:
|
| Часовой пояс GMT +3, время: 21:58. |