Здравствуйте, гость ( Вход | Регистрация )

Свернуть

Новости

Форум Лучшее из галереи Уроки и статьи
07.12.2015 Выставочный зал: кошарик - персональная выставка
31.08.2015 Интересные ссылки для рисовальщиков
21.01.2015 Выставочный зал 2: Игрушки Олеси Гавриленко

27.12.2014 Выставочный зал: кошарик - персональная выставка
17.11.2014 Дуэль "Рыбки" - победитель Лисичка
05.11.2014 Конкурс иллюстраций "Снежная королева", до 31 января
30.10.2014 Дуэль "Рыбки" до 16 ноября
14.07.2014 Мастер-класс Мини-мишка в технике фелтинга
26.05.2013 Ау! Мы ищем таланты! – приглашаем модераторов!
Invaders must die!
tn_gallery_6140_379_176612.jpg

06.01.2016 Виртуальный Музей: Русский живописец Василий Дмитриевич Поленов
28.12.2015 Виртуальный Музей: Нидерландский живописец Квентин Массейс
16.12.2015 Виртуальный Музей: Итальянский живописец Франче́ско Айец
17.11.2015 Виртуальный Музей: Луи Анкетен (Louis Anquetin)
11.11.2015 Виртуальный Музей: Русский живописец Алексей Иванович Корзухин
Файловый архив
06.09.2013 Прочее: Файлы к уроку "Чайная церемония"
05.09.2013 Журнал Art Tower: ArtTower Magazine #8
16.05.2013 Adobe Photoshop: Кисти: Reid Southen brush
16.05.2013 Adobe Photoshop: Кисти: Goro Fujita brush
16.05.2013 Adobe Photoshop: Кисти: Кисти для рисования в Photoshop
Блоги Новости в цифровом мире и мире дизайна
02.12.2014 Дама с каменьями: Вести с крыши 2
08.11.2014 Timenews: Вассерман: прежняя модель мировой экономики исчерпала себя
06.11.2014 Дама с каменьями: Приятные вести с крыши))) от Гаргула)
02.11.2014 Spell: Книги Дж. Кэмерон
22.10.2014 Vjaz: от ФУ до МА
25.11.2015 Комментарий от Foxx в Costa Rica Adventure Divers, Логотип для компании и рисунок на майку (maria_mer)
18.11.2015 Комментарий от maria_mer в Spellforce - майка, для фанов игры (maria_mer)
18.11.2015 Комментарий от maria_mer в Белая книга. Целитель - любительский прект (maria_mer)
09.04.2015 Комментарий от Romana в Книги Дж. Кэмерон (Spell)
08.04.2015 Комментарий от Romana в Я решил вернуться... (Элбирет)
16.03.2015 ФОТОФОРУМ-2015
01.01.2015 ARQUTE.com и ArtTalk.ru закрываются
19.01.2017 Конкурс дизайна логотипов
26.12.2016 ру/Ководство: О творческом развитии
14.10.2016 ру/Ководство: Разнообразие

 
Добавить ответ в эту темуОткрыть тему
> Основоположения программирования - часть IV.2, Что можно делать с массивами?
V
Des
сообщение 5.01.2009 - 07:45
Сообщение #1


тритониус
****

Звезда писателя I степениЗа вклад в развитие ArtTower.ru
Группа: Почетные граждане
Сообщений: 728
Регистрация: 9.12.2007
Из: Москва \ Питер
Пользователь №: 6553
дышу под водой
Галерея Блог


Симпатии:  68  


Предыдущая часть: Основоположения программирования - часть IV.1
Начало: Основоположения программирования - часть I

Исходники к уроку: lesson_arrays01.rar

2. Методы для работы с массивами

Итак, одномерный массив - это набор данных (в AS2 - возможно, и разных типов), проиндексированных ("пронумерованных") целыми числами от нуля до N. Длина (размер) массива тогда - length = N+1.
Как уже говорилось в предыдущей части, часто мы работаем с массивом, не зная его длины. Более того - иногда она нам совершенно не важна. Можно добавить элемент (увеличив тем самым длину массива), удалить элемент (уменьшив тем самым длину массива), или даже получить часть массива, и все это - не задумываясь о его размере.
Делается это с помощью методов push(), pop() и slice(). Метод push() добавляет элемент в конец массива, метод pop() возвращает значение последнего элемента, удаляя при этом его из массива (уменьшая т.о. длину массива на единицу), а метод slice() возвращает часть массива между указанными в параметрах индексами.
Начнем с метода push(): он используется очень часто.

var arr:Array = new Array("one","two"); \\ массив из двух элементов-строк
var newLength:Number = arr.push("three"); \\ добавляемэлемент в конец массива.

Теперь в массиве 3 элемента: "one", "two" и "three" с индексами 0, 1 и 2 соответственно.
Метод push() возвращает новую длину массива, хотя, если нам не нужна эта длина для дальнейшей работы,
можно, конечно, просто написать arr.push("three");
Метод push() позволяет добавить и несколько элементов сразу, напр.:

arr.push("one","one More...","...and More");

Пример использования метода push() в функции для добавления любого числа элементов-нулей в массив:

function addZeroes(n:Number):Number {
for (var i:Number = 0; i<n-1;i++) { arr.push(0); }
return arr.length;
}


Метод pop() служит для прямо обратного: возвращает значение последнего элемента массива и удаляет этот элемент, уменьшая т.о. размер массива на единицу.

var arr:Array = new Array(100,200,300);
var fromArray:Number = arr.pop();


Теперь в массиве arr - два элемента: 100 и 200, а в переменной fromArray - значение бывшего последнего - т.е. 300.
Вместе методы push() и pop() позволяют организовать на основе массива т.н. стек - структуру данных, в которой реализуется принцип "первым вошел - последним вышел". Т.е.: доступ "на считывание" есть только к последнему добавленному элементу, а добавляются элементы только в конец структуры ("на вершину стека"). Проще всего представить себе стек в виде "автоматного магазина ("рожка"): сначала в него "набивают" патроны ("снаряжают магазин"), потом - стреляют, причем последним пойдет в дело тот патрон, который был "набит" первым. Стеки встречаются в программировании (вообще, не только AS) сплошь и рядом: от организации работы памяти компьютера до программирования флэш-эффектов и игр.

Метод slice() возвращает новый массив, содержащий элементы исходного между указанными индексами, включая стартовый, но не включая последний из них. Формально он описывается так: slice([startIndex:Number],[endIndex:Number]):Array (в формальных описаниях квадратные скобки означают, что данный параметр необязателен - т.е. может быть не указан в каких-то применениях, в отличие от обязательных параметров, без которых метод или функция просто не будут работать - вызовут ошибку.)
Проще всего показать его в действии:

var arr:Array = new Array(10,20,30,40,50,60);
var slicedArr:Array = arr.slice(1,3);


Сейчас исходный массив - arr - остался без изменений, а в slicedArr хранится массив из двух элементов со значениями 20 и 30
Если второй параметр не указан, то в результат войдут элементы исходного массива от указанного стартового индекса до конца массива, включая стартовый. Если параметры не заданы вообще - в результате будет создана копия исходного массива.
Если стартовый и\или конечный индекс в параметрах меньше нуля - то отсчет будет вестись от последнего элемента массива, где последний элемент - -1.
Примеры:
CODE
var arr:Array = new Array(10,20,30,40,50,60);
var slicedOnePar:Array = arr.slice(2) // результат - (30,40,50,60)
var slicedZeroPar:Array = arr.slice() // результат - (10,20,30,40,50,60)
var slicedNegPar:Array = arr.slice(2,-2) // результат - (30,40)


Вставить в любое место любое число элементов или удалить любое число элементов из массива, начиная с любого места, позволяет метод splice(). Формальное описание: splice(startIndex:Number, [deleteCount:Number], [value:Object]):Array
Этот метод возвращает значение-массив только при удалении элементов из исходного массива - тогда в возвращаемом массиве будет массив с удаленными элементами.
startIndex - обязательный параметр, указывающий индекс, начиная с которого начинается вставка или удаление элементов. Если следующий за ним параметр - N, не равное 0, то будут удалены N элементов массива, его длина соответственно уменьшится, а метод возвратит удаленные элементы. Если второй параметр - 0, то удаления не произойдет, а если указан третий параметр, то он будет добавлен после элемента, индекс которого указан в первом.
И, как и в других методах работы с массивами, можно указывать startIndex числом меньше нуля - в этом случае отсчет будет от последнего элемента, который обозначен -1.
Немного путано? - на примерах разберемся...

CODE
var arr:Array = new Array("а","б","в","г","д")
arr.splice(0,2); // arr содержит ("в","г","д")
arr.splice(1,0,"z"); // arr содержит ("в","г","z","д")
var arrSpliced:Array = arr.splice(-2);
/*
в результате этой последовательности операций
массив arr содержит ("в","г"), при этом в arrSpliced
будут элементы ("z" и "д")
*/


Обратите внимание: метод splice() не делает копии исходного массива, а изменяет тот, в котором вызван.

Метод reverse() - тут все очень просто: этот метод меняет порядок следования элементов в массиве на обратный. Он тоже не создает копии, изменяя тот массив, для которого вызван:

var arr:Array = new Array(10,20,30,40);
arr.reverse(); // в arr теперь (40,30,20,10)


Метод concat() позволяет слить два или больше массивов в один новый. Проще всего на примере:
CODE
var arr1:Array = new Array(1,2);
var arr2:Array = new Array(3,4);
var arr3:Array = new Array(5,6,7);
// есть 3 массива
var arrConcatenated1:Array = arr1.concat(arr2);
// результат в arrConcatenated1 - (1,2,3,4)
var arrConcatenated2:Array = arr2.concat(arr1,arr3);
// результат в arrConcatenated2 - (3,4,1,2,5,6,7)


Если метод был вызван без параметров, будет создана копия исходного массива.


3. Многомерные массивы.

Как уже говорилось, элементы массива могут быть любого Типа Данных. А что, если мы элементами массива сделаем... массивы? Попробуем...

CODE
var arr00:Array = new Array("a1","a2");
var arr01:Array = new Array("b1","b2");

// 2 массива по 2 элемента в каждом...
var arr2dim:Array = new Array(arr00,arr01);
// а вот это уже - двумерный массив!


Ничего особенного - ни формально, ни на практике - в такой конструкции нет. А многие, наверно, уже узнали матрицу 2x2 из курса линейной алгебры...
Для того, чтобы получить (или изменить) значение элемента в таком двумерном массиве, используется такой синтаксис:

arr2dim[0][0] - здесь в нашем примере элемент со значением "a1"
arr2dim[1][0] - здесь - "b1"
arr2dim[1][1] - здесь - "b2"

Т.е. к элементам двумерного массива обращаются по двум индексам: первый - номер "строки", второй - номер элемента в строке (или - номер "колонки").
Короче объявление и инициализацию двумерного массива можно записать так:

CODE
arr2D:Array = new Array(new Array("a","b","c"),new Array("d","e","f"));
// Двумерный массив 3x2 готов к употреблению smile.gif
// Есть также сокращенная форма синтаксиса для объявления и инициализации массива:
var arr:Array = [1,2,3];
// эквивалентно записи var arr:Array = new Array(1,2,3);
// Поэтому громоздкую конструкцию для инициализации двумерного массива можно записать короче:
var arr2D:Array = [["a","b","c"],["d","e","f"]];


Главное - не запутаться в скобочках и кавычечках smile.gif
Мне более удобочитаемой всегда представлялась полная форма записи. Впрочем - кому как удобнее...


4. Например...

Итак: для чего все это нужно? - посмотрим на примерах.
Я решил два примера совместить в одной флэшке - дабы сэкономить на рисовании бэкграунда, задании параметров документа и пр.



Создаем новый документ ActionScript 2, Flash Player 8, частота кадров 25, фон - белый, размер - 500x250 px.

А. Двумерный массив роликов

Нарисуем квадрат 50x50px, нажмем [F8], выберем тип: MovieClip (фрагмент ролика) и дадим имя символа "mc" => [ОК]. Со сцены наш mc можно сразу удалить - нас интересует только тот, что в библиотеке. Если панель библиотеки не открыта - вызываем ее [Ctrl] + [L].
В библиотеке - двойной щелчок на единственном символе - ролике mc - и редактируем его. Надеюсь, что получение чего-то похожего на то, что в исходных файлах, затруднений не вызывает.
На этом наше рисование закончено. Фон нашего ролика-примера будет заполнен копиями этого "квадратика", один из которых, случайно выбранный, раз в секунду начинает проигрываться. А сами ролики (вернее, конечно, ссылки на них2, но нам-то для управления роликами это все равно!) будут хранится в двумерном массиве, т.е. управлять ими (обращаться к ним) мы сможем просто по двум индексам - индексу "ряда" и индексу "колонки". Т.о. совершенно, казалось бы, абстрактная структура данных - двумерный массив - становится вполне зримым фоном нашего примера.
Зададим "имя для экспорта" нашему ролику: в библиотеке RMB1 => Связывание (Linkage). Здесь отмечаем галочкой "Экспортировать для Action Script" (при этом "Экспортировать в первый кадр" отметится автоматически - так и надо) и задаем Идентификатор "mc" => [OK].



Библиотеку можно закрыть, если мешает.
В первом (и единственном) кадре пишем следующее (открыв, разумеется, редактор скриптов - [F9]):
CODE

var mc_array:Array = new Array(); // будущий двумерный массив
for (var ii:Number = 0;ii<5;ii++) { // ...пробегаем по "строкам" ("рядам") массива
mc_array[ii] = new Array(); // для каждой строки (ряда) создаем массив-"колонку"...
for (var j:Number=0;j<10;j++) {
/* и в каждой колонке - присоединяем
библиотечный ролик (MovieClip), добавляя новый элемент в массив */
mc_array[ii][j] = _root.attachMovie("mc","mc"+ii+j,_root.getNextHighestDepth());
mc_array[ii][j].stop();
// устанавливаем наш "квадратик" на нужное место
mc_array[ii][j]._x = j*50;
mc_array[ii][j]._y = ii*50;

/*
обратите внимание: во-первых, строки и колонки
в массиве и в сцене "поменялись местами"
во-вторых, не забываем, что начало координат сцены -
в верхнем левом углу.
Т.е. ролик с именем "mc00" будет находиться в верхнем левом углу,
а с именем "mс04" - в левом нижнем.
*/
}
}
function allStop():Void { // функция, останавливающая все ролики
for (var ii:Number=0;ii<5;ii++) { // пробегаем по рядам...
for (var j:Number=0;j<10;j++) { // ...в каждом ряду - по колонкам...
_root.mc_array[ii][j].gotoAndStop(1); // и останавливаем каждый ролик
}
}
}
function randomPlay():Void { // функция запуска одного случайного ролика
_root.mc_array[random(5)][random(10)].play();
// разберетесь в этой конструкции?
}
function changeMC() {
allStop(); // остановить все ролики...
randomPlay(); // ...и запустить один случайно выбранный
}
var intID:Number; // уникальный идентификатор интервала
// вызываем смену проигрываемого ролика каждую секунду
intID = setInterval(changeMC,1000);
// ==========================
// сюда вставим код примера Б
// ==========================
stop();

Все! [F12] - и смотрим, как наши "квадратики" "вспыхивают" в случайном месте сцены... 3

Б. Поиск всех совпадений строки-образца со значением строки-элемента массива.

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

_root.createTextField("out_tf",_root.getNextHighestDepth(),10,10,480,230); // новое текстовое поле
out_tf.multiline = true; // многострочное
out_tf.selectable = false; // не дадим пользователю возможности выбора! smile.gif
out_tf.wordWrap = true; // перенос длинных слов на новую строку при выводе
// TextFormat - специальный Тип Данных для задания параметров текста.
// его используют для задания жирности, размера, цвета и семейства шрифтов.
var tf_ft:TextFormat = new TextFormat();
tf_ft.bold = true; // жирный шрифт
tf_ft.align = "left"; // выравнивание влево
tf_ft.color = 0xAACCFF; // голубой цвет в виде RGB-триады
tf_ft.font = "_sans"; // системный рубленый шрифт
tf_ft.size = 14; // размер шрифта - 18px
// массив для поиска
var arr:Array = new Array("С Новым Годом!","Удачи!","Веселого Рождества!","Happy New Year!","Happy New Year!","Счастья!","Успехов!");

var str:String = "Happy New Year!"; // строка-образец
var currIndex:Number = 0; // текущий индекс при поиске в массиве строк
var resultIndexes:Array = new Array();
/*
массив, в котором будут сохранены индексы тех элементов,
значения которых совпадают со строкой-образцом
*/
while (arr[currIndex]) {
/* мы можем так написать - и так часто делают для пробегания
по всему массиву - ведь значение undefined при проверке условия
продолжения выполнения цикла эквивалентно false. Правда,
это только в случае, если среди значений элементов массива
заведомо нет ни undefined, ни null, ни пустой строки, ни false
*/
if (arr[currIndex] == str) {
resultIndexes.push(currIndex);
/* если совпадение строк - добавить текущий индекс
в массив результатов */
}
currIndex++; // не забыть увеличить счетчик текущего индекса
}
/*
после выполнения этого цикла в массиве resultIndexes будут
находиться все индексы элементов исходного массива строк,
значения которых совпадают со строкой-образцом.
*/
// выведем в текстовое поле исходный массив для поиска:
currIndex = 0;
out_tf.text += "Исходный массив: \n";
while (arr[currIndex]) {
out_tf.text+=currIndex.toString() + ": " + arr[currIndex] + "\n";
currIndex++; // увеличиваем счетчик цикла
}
out_tf.text+="--------------------------------\n"; // сделаем отступ перед выводом номеров индексов
if (resultIndexes.length > 0) { // если есть что выводить...
currIndex = 0; // воспользуемся той же переменной для текущего индекса
/* выведем в текстовое поле заголовок*/
out_tf.text += "Найденные совпадения со строкой\n\""+str+"\": ";
/*
если нам нужно вывести в текстовое поле кавычку (двойную или одинарную) -
её нужно "прикрыть" символом обратного слэша (косой черты),
чтобы программа не приняла ее за признак окончания строки:
\" в текстовом поле даст "
\' => '
если в строке встретится "\n" (без кавычек) - скрипт сделает в этом месте
перевод строки. Это т.н. "escape-последовательности" - подробнее
см. в части III.1 - http://arttower.ru/forum/index.php?showtopic=9339
*/
while (currIndex < resultIndexes.length) {
/*
пока текущий индекс меньше длины массива результатов...
*/
out_tf.text += resultIndexes[currIndex].toString() + " ";
/*
...добавим к тексту в out_tf индекс, конвертированный
в строковое значение, и пару пробелов после каждого значения.
*/
currIndex++; // и снова - не забыть увеличить счетчик цикла - текущий индекс
}
} else {
out_tf.text = "совпадений нет\n";
}
/*
применяем TextFormat - "стиль", определенный в tf_ft
форматирование текста применяется ПОСЛЕ всего вывода в текстовое поле -
к уже выведенному в TextField тексту.
*/
out_tf.setTextFormat(tf_ft);


[F12]. Работает? smile.gif

Тогда - продолжение


_________________

1 Напоминаю, что "RMB" - стандартное сокращение для "Right Mouse Button", "щелчок правой клавишей мыши".
2 Мы уже говорили в предыдущих уроках о том, что такое ссылочные (составные) Типы Данных - а именно к ним относится и Тип Данных MovieClip. Для массивов то, что они относятся к ссылочному (составному) Типу Данных, играет очень важную, в т.ч. для избежания грубых практических ошибок, роль - и об этом я расскажу в следующей части.
3 Здесь я пошел на одну небольшую хитрость: чтобы упростить код, я выбрал длину ролика mc (25 кадров) равной частоте кадров. Поэтому, когда наступает Время остановиться, перейдя на первый кадр, ролик находится как раз в последнем кадре - и "скачка" в первый кадр откуда-нибудь из середины ролика не происходит. Чтобы "возвращать" ролик в исходное состояние плавно, нужно как-либо программно "откатывать" его из конца в начало, причем для каждого ролика нужно будет хранить признаки вроде "isNowPlaying", "isNowReversing" (конечно, признаки эти будут храниться в специальном массиве!) - в общем, код будет немного посложнее... но вряд ли это поможет вам в понимании работы с массивами.
____________________________________


Автором урока является Des.
Запрещается копирование и публикация урока на других сайтах без письменного согласия автора и размещения ссылок.


The tutorial is written by Des.
No part of this tutorial can be copied/pasted on any other website without the author's express written permission.


Сообщение отредактировал Des - 28.09.2009 - 08:55


--------------------
"Высшая мудрость - умение разговаривать с людьми" ((с) Ямамото Цунэтомо (Дзётё), "Хагакурэ")
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Quieteroks
сообщение 25.09.2009 - 16:41
Сообщение #2






Группа: Туристы
Сообщений: 2
Регистрация: 25.09.2009
Пользователь №: 14167



Симпатии:  0  


Des, огромное тебе спасибо за эти уроки.

В этом уроке есть ЖЕСТКАЯ подстава.
// устанавливаем наш "квадратик" на нужное место
mc_array[ii][j]._x = j*50;
mc_array[ii][j]._y = i*50;

Я минут 15 просматривал весь код и все же нашел, в чем проблема.
Большая просьба, копируй готовый отлаженный код из Flash в уроки.

А ошибка была в отсутствии переменной i, у нас же ii
mc_array[ii][j]._y = ii*50;

И у меня есть вопрос.
А как массивы реагируют и хранятся в базе MySQL, если юзать FlashVar (Как то так команда называеться)?
Или как их хранить в базе на сервере?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Des
сообщение 28.09.2009 - 08:53
Сообщение #3


тритониус
****

Звезда писателя I степениЗа вклад в развитие ArtTower.ru
Группа: Почетные граждане
Сообщений: 728
Регистрация: 9.12.2007
Из: Москва \ Питер
Пользователь №: 6553
дышу под водой
Галерея Блог


Симпатии:  68  


Цитата(Quieteroks @ 25.09.2009 - 16:50) *
Des, огромное тебе спасибо за эти уроки.

В этом уроке есть ЖЕСТКАЯ подстава.
// устанавливаем наш "квадратик" на нужное место
mc_array[ii][j]._x = j*50;
mc_array[ii][j]._y = i*50;

Я минут 15 просматривал весь код и все же нашел, в чем проблема.
Большая просьба, копируй готовый отлаженный код из Flash в уроки.

Обычно так и делаю, в этом случае в т.ч., а изменять "i" на "ii" пришлось из-за совпадения с тегом форума
Цитата(Quieteroks @ 25.09.2009 - 16:50) *
А ошибка была в отсутствии переменной i, у нас же ii
mc_array[ii][j]._y = ii*50;

Спасибо!

Цитата(Quieteroks @ 25.09.2009 - 16:50) *
И у меня есть вопрос.
А как массивы реагируют и хранятся в базе MySQL, если юзать FlashVar (Как то так команда называеться)?
Или как их хранить в базе на сервере?


flashVars - не команда, это Атрибут HTML-тегов ролика. Позволяет передавать переменные и их значения из HTML-страницы в flash-ролик путем указания атрибута тега flashVars="var1=12345&...."
Т.е. путь от MySQL до флэш-ролика выглядит так (в случае PHP-серверного скрипта):
MySQL => PHP-запрос\разбор результата\формирование вывода => HTML с соотв. тегами вставки флэш-ролика и их атрибутами\параметрами => Flash.
Через flashVars, т.о., можно передать только небольшой набор данных и только один раз - при загрузке страницы.

Есть еще, конечно, вариант[ы] обращения самой флэшки к серверу (серверному скрипту), что и позволяет работать с динамическими данными. Удобно обычно, если эти данные идут в флэшку в виде XML.
Есть и варианты "общения" флэшки с HTML-контейнером в ходе работы, и даже с другими флэшками на этой же странице, или даже в другом окне броузера (ExternalInterface)


--------------------
"Высшая мудрость - умение разговаривать с людьми" ((с) Ямамото Цунэтомо (Дзётё), "Хагакурэ")
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Quieteroks
сообщение 28.09.2009 - 09:14
Сообщение #4






Группа: Туристы
Сообщений: 2
Регистрация: 25.09.2009
Пользователь №: 14167



Симпатии:  0  


Я еще слышал про JHON, вроде он динамически с этим справляется неплохо...

Так как все же хранятся массивы в базе? Это вообще правильно или лучше переменные разбить на несколько составляющих для подобных целей?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Des
сообщение 28.09.2009 - 11:14
Сообщение #5


тритониус
****

Звезда писателя I степениЗа вклад в развитие ArtTower.ru
Группа: Почетные граждане
Сообщений: 728
Регистрация: 9.12.2007
Из: Москва \ Питер
Пользователь №: 6553
дышу под водой
Галерея Блог


Симпатии:  68  


Цитата(Quieteroks @ 28.09.2009 - 09:23) *
Я еще слышал про JHON, вроде он динамически с этим справляется неплохо...

Так как все же хранятся массивы в базе? Это вообще правильно или лучше переменные разбить на несколько составляющих для подобных целей?

Вопрос имеет мало отношения к флэшу, но тем не менее: как хотите, так и хранятся. Хоть по одному значению на запись, хоть в одной строке, которая потом эксплодится\имплодится средствами PHP или AS... зависит от задачи.

Сообщение отредактировал Des - 28.09.2009 - 11:15


--------------------
"Высшая мудрость - умение разговаривать с людьми" ((с) Ямамото Цунэтомо (Дзётё), "Хагакурэ")
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Scather
сообщение 28.09.2009 - 11:50
Сообщение #6






Группа: Туристы
Сообщений: 4
Регистрация: 27.01.2009
Пользователь №: 11555



Симпатии:  0  


Des, во всем гугле никто лучше не смог объяснить про массив мувиков:) Опять помог, спасибо!
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

Быстрый ответДобавить ответ в эту темуОткрыть тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия форума Сейчас: 18.12.2017 - 00:28