Strict Standards: Resource ID#18 used as offset, casting to integer (18) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#24 used as offset, casting to integer (24) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#26 used as offset, casting to integer (26) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#27 used as offset, casting to integer (27) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: превращение массива в строку и обратно [2]
ТвойWeb ТвойWeb
Качественный Европейский хостинг
Форум для чайников
 Чат на форуме      Помощь      Поиск      Пользователи


 Страниц (5): « 1 [2] 3 4 5 » 

> Без описания
Дмитрий Б.
Отправлено: 20 Октября, 2005 - 02:07:47
Post Id



Super Member


Покинул форум
Сообщений всего: 800
Дата рег-ции: Март 2005  
Откуда: Иркутск

Карма 0




Забыл уточнить: первый параметр - строка с названием переменной, второй - сама переменная...
 
 Top
kr12
Отправлено: 22 Октября, 2005 - 14:02:53
Post Id


Member


Покинул форум
Сообщений всего: 136
Дата рег-ции: Март 2005  

Карма 0




Итого:
функция print_js создает компактную и удобную для понимания (визуального) строку, но не учитывает пропущенных элементов и ассоциативных элементов.
функция arrayToString правильно преобразует массив, но сильно увеличивается размер строки (для плотно заполненных массивов) и ухутшается читабельность.
Думаю наоснове комбинации этих функций создать некую функцию, которая сочиталабы их положительные качества, но не имела бы их недостатков.
Например для массива
CODE:
q=[0,1,2];q[5]=new Array();
q[5]=[50,51]
q[5]['ss']='5s'
q['ss']='s'

функция print_js даёт:
CODE:
[0,1,2,[50,51,'5s'],'s']
,что неверно
а функция arrayToString:
CODE:
a=new Array();a["0"]=0;a["1"]=1;a["2"]=2;a["5"]=new Array();a["5"]["0"]=50;a["5"]["1"]=51;a["5"]["ss"]="5s";a["ss"]="s";

Cоздаваемая функция будет сохранять этот массив в строку
CODE:
[0,1,2,/2/,[50,51,ss='5s'],ss='s']
, которая корректно превращается в массив посредством eval. Но к сожалению не дает правильный массив. Далее следует выловить из полученого массива значения, которые не соответствуют значениям строкии (и заменить их на 'undefined') и есле они являются строкой (ss='s') - создать соответствующие элементы массива, а если обьектом (/2/) (кто-нибудь знает, что это за обьет такой) - вставить н-ное кол-во неопределенных элементов. Если не сочтёте это за бред сивой кобылы, то я приступаю. :)
 
 Top
Дмитрий Б.
Отправлено: 24 Октября, 2005 - 01:20:53
Post Id



Super Member


Покинул форум
Сообщений всего: 800
Дата рег-ции: Март 2005  
Откуда: Иркутск

Карма 0




Приступай... Флаг тебе в руки!
 
 Top
kr12
Отправлено: 29 Октября, 2005 - 11:20:47
Post Id


Member


Покинул форум
Сообщений всего: 136
Дата рег-ции: Март 2005  

Карма 0




Готово. (удалено, т.к. содержало ошибки)
 
 Top
kr12
Отправлено: 14 Декабря, 2005 - 14:22:54
Post Id


Member


Покинул форум
Сообщений всего: 136
Дата рег-ции: Март 2005  

Карма 0




при попытке практического применения функции обнаружилось, что for( in ) проходит массив не в правильном порядке, а в порядке создания. Т.е. если создавать массив скажем так:
CODE:

b=[]
b[2]='a2'
b[1]=new Array()
b[1]['ss']='d'
b[0]='aa'

то функция выдаст ['a2',[ss='d'],'aa'], что не верно.
Есть ли простой (или сложный :( ) способ "выровнять" созданный массив перед преобразованием?
 
 Top
Леголегс Администратор
Отправлено: 14 Декабря, 2005 - 15:25:15
Post Id



JS-маньяк


Покинул форум
Сообщений всего: 2109
Дата рег-ции: Июль 2004  
Откуда: Липецк

Карма 17




kr12 пишет:
Есть ли простой (или сложный Недовольство, огорчение ) способ "выровнять" созданный массив перед преобразованием?
А зачем? Пусть уж лучше функция восстанавливает исходный объект в точности.
 
 Top
kr12
Отправлено: 15 Декабря, 2005 - 01:50:43
Post Id


Member


Покинул форум
Сообщений всего: 136
Дата рег-ции: Март 2005  

Карма 0




Оно может для чего то и лучше, но нам ведь надо потом в точности восстановить исходный массив из полученой строки. Под сложным способом я имею в виду исспользование функции arrayToString, приведенной выше Дмитрием Б. с последующей сортировкой и, возможно, предварительным превращением в правильный массив полученной строки типа
CODE:
["5"]=new Array();a["5"]["0"]=50;a["5"]["1"]=51;a["5"]["ss"]="5s";a["ss"]="s";
 
 Top
Дмитрий Б.
Отправлено: 15 Декабря, 2005 - 02:11:42
Post Id



Super Member


Покинул форум
Сообщений всего: 800
Дата рег-ции: Март 2005  
Откуда: Иркутск

Карма 0




Блин, да самый простой способ - это не париться и писать массив в текстовый файл в виде скрипта (a=new Array() и понеслась), а потом возраждать eval'ом (или ещё проще - document.getElementById('myscript'Подмигивание.src=...).
 
 Top
kr12
Отправлено: 15 Декабря, 2005 - 02:38:58
Post Id


Member


Покинул форум
Сообщений всего: 136
Дата рег-ции: Март 2005  

Карма 0




Но мы ведь не ищщем простых способов :(
 
 Top
kr12
Отправлено: 15 Декабря, 2005 - 13:58:56
Post Id


Member


Покинул форум
Сообщений всего: 136
Дата рег-ции: Март 2005  

Карма 0




Последний шаг оказался прощще, чем я думал:
CODE:

a=arrayToLString('a',a)
a=a.split(';').sort().join(';').substr(1);
eval(a)

упорядочивает внутреннюю структуру массива.
Были исправлены еще мелкие ошибки. Теперь точно работает.
ИТОГО:
Скачать файл: file.rar
Скачан раз: 633
 
 Top
Страниц (5): « 1 [2] 3 4 5 »
Сейчас эту тему просматривают: 7 (гостей: 7, зарегистрированных: 0, скрытых: 0)
« JavaScript »


Все гости форума могут просматривать этот раздел.
Только администраторы и модераторы могут создавать новые темы в этом разделе.
Только администраторы и модераторы могут отвечать на сообщения в этом разделе.



Форум на AlfaSpace.NET


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0478]     [ Gzipped ]



Notice: ob_end_flush(): failed to send buffer of ob_gzhandler (1) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/page_tail.php on line 33