Просмотр полной версии : Проблема с двумерным массивом
bulya123
25.09.2008, 14:31
Добрый день, совсем запутался, возникла проблема с двумерным массивом
var filename_list = new Array();
var filepath:String = "portfolio/spec/";
var content_xml = new XML();
content_xml.ignoreWhite = true;
content_xml.onLoad = function() {
var node:Array = this.firstChild.childNodes;
for (var i = 0; i<node.length; i++) {
var nodes:Array = this.firstChild.childNodes[i].childNodes;
for (var j = 0; j<nodes.length; j++) {
filename_list[i, j] = nodes[j].attributes.filename;
trace(filename_list[i, j])//здесь выводит все нормально
}
}
trace(filename_list)//а здесь выводить только последние значения
};
content_xml.load("specproject.xml");
Структура XML приблизительно такая:
<?xml version="1.0" encoding="windows-1251"?>
<portfolio>
<items label="TORQUE">
<item filename="port01.png" />
<item filename="port02.png" />
<item filename="port03.png" />
</items>
<items label="GRAND PRIX">
<item filename="port04.png" />
<item filename="port05.png" />
<item filename="port06.png" />
</items>
<items label="ЕВРОФАРМ">
<item filename="port07.png" />
<item filename="port08.png" />
<item filename="port09.png" />
<item filename="port09.png" />
</items>
</portfolio>
Не могу понять в чем дело:confused:
Буду благодарен за помощь:)
Doctor76
25.09.2008, 14:46
Я вместо этой строки
filename_list[i, j] = nodes[j].attributes.filename;
Написал так:
filename_list.push(nodes[j].attributes.filename)
Работает вроде как..
filename_list[i][j] = nodes[j].attributes.filename;
bulya123
30.09.2008, 12:17
filename_list[i][j] = nodes[j].attributes.filename;
Спасибо, то, что нужно, просто синтаксис перепутал:p
Я вместо этой строки
filename_list[i, j] = nodes[j].attributes.filename;
Написал так:
filename_list.push(nodes[j].attributes.filename)
Работает вроде как..
Нужен именно двумерный массив, а метод push делает одномерный прикрепляя в конец массива
bulya123, мультипостинг у нас запрещен, пользуйтесь кнопкой "мультицитата" и "изменить"
nOobCrafter
14.11.2008, 15:06
А если мне надо так же вывести "nodes.length", то что делать?..а то берется только последнее значение((
var filename_list = new Array();
var filepath:String = "";
var content_xml = new XML();
content_xml.ignoreWhite = true;
content_xml.onLoad = function()
{
var node:Array = this.firstChild.childNodes;
for (var i = 0; i<node.length; i++)
{
filename_list[i] = new Array();
var nodes:Array = this.firstChild.childNodes[i].childNodes;
for (var j = 0; j<nodes.length; j++)
{
filename_list[i][j] = nodes[j].attributes.filename;
}
trace("то как должно быть - " + nodes.length) // все ок =3, =4, =4
}
trace("то что получаем(( - " + nodes.length) // последнее значение = 4
};
content_xml.load("specproject.xml");
var filename_list = new Array();
var filepath:String = "portfolio/spec/";
var content_xml = new XML();
content_xml.ignoreWhite = true;
content_xml.onLoad = function(success:Boolean) {
if(success){
var node:Array = this.firstChild.childNodes;
for (var i = 0; i<node.length; i++) {
var nodes:Array = this.firstChild.childNodes[i].childNodes;
var nodes_length:Number = this.firstChild.childNodes[i].childNodes.length;
filename_list[i] = new Object();
filename_list[i]._length=nodes_length;
for (var j = 0; j<nodes.length; j++) {
var filename:String = nodes[j].attributes.filename;
filename_list[i][j] = new Object();
filename_list[i][j]._filename=filename;
}
}
trace(filename_list[1][0]._filename)
}
};
content_xml.load("specproject.xml");
nOobCrafter
14.11.2008, 16:54
2 MrXoT Ммм и что это нам дало?... Мне надо кол-во елементов. Немного подправил верхний пост, что бы было понятно что именно мне надо.
все очень просто...
Задаем массив как обьект...
и к нему можно легко общаться...
очень удобно если 1 поле в хмл имеет много параметров...
например если человек добавит новое поле title="" то твой вариант не получится
а мой просто при добавлении поля filename_list[i][j]._title = title;
и все....
nOobCrafter
14.11.2008, 17:53
Ммм у нас небольшое недопонимаение.
Мне НЕ надо узнавать что и где находится, с этим у меня все ок. Мне надо узнать КОЛ-ВО элементов ВТОРОГО массива, для каждого элемента первого отдельно. А у меня выводит только кол-во елементов последнего массива (i = 2). (в коде старался это отразить.)
З.Ы.
например если человек добавит новое поле title="" то твой вариант не получится
я использую 3 параметра и все у меня корректно отображается.(могу хоть 10, не в том суть)
<?xml version="1.0" encoding="utf-8" ?>
<header>
<items razdel="Безопасность">
<item title="1.1"
description="Сегодня запущен сайт в тестовом режиме."
image="thumbnails/Cotton_Buds.jpg" />
nOobCrafter
17.11.2008, 18:40
Извиняюсь за ап, но тема актуальна.
Mnilionic
17.11.2008, 19:29
а зачем вообще xml переделывать в массив?
если очень нужно то вызывайте свойство length нужного массива и узнаете длинну.
или можно переписать xml в массив своих объектов, что, в принципе не имеет смысла при однородном xml
var filename_list = new Array();
var filepath:String = "";
var content_xml = new XML();
content_xml.ignoreWhite = true;
content_xml.onLoad = function() {
var items = this.firstChild.firstChild;
var i = 0;
while(items){
filename_list[i] = new Object();
filename_list[i].values = new Array();
var item = items.firstChild;
var count = 0;
while(item){
filename_list[i].values.push( item.attributes['filename'] );
// ->
item = item.nextSibling;
count++;
}
filename_list[i].count = count;
filename_list[i].label = items.attributes['label'];
// ->
items = items.nextSibling;
i++;
}
trace(filename_list[0].label + ': (' + filename_list[0].values + ') всего: ' + filename_list[0].count)
trace(filename_list[1].label + ': (' + filename_list[1].values + ') всего: ' + filename_list[1].count)
trace('и тд')
};
content_xml.load("specproject.xml");
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.