Как хранить многомерные массивы?

Статус
В этой теме нельзя размещать новые ответы.

the_stalker

Постоялец
Регистрация
19 Фев 2007
Сообщения
116
Реакции
5
Как хранить многомерные массивы в реляцинной БД?
 
Правильный ответ - никак. Потому что реляционная модель этого не позволяет (Для просмотра ссылки Войди или Зарегистрируйся)
Но извращаться можно всегда. Например хранить многомерный массив как текст с некоторыми разделителями.

Например
Array
Код:
(
    [1] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )
    [2] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => 4
            [4] => 5
        )
    [3] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )
)
Такую структуру можно хранить как:
Код:
1|1,2,3#2|1,2,3,4,5#3|1,2,3
Общая суть вопроса: необходимо написать конвертер массив=>текст и текст=>массив
 
необходимо написать конвертер массив=>текст и текст=>массив
да не надо ничего писать - есть такое понятие как сериализация.
 
Для PHP ,например, -

unserialize()
serialize()
 
serialize() / unserialize(), но это очень медленно, лучше присматреться в сторону JSON: Для просмотра ссылки Войди или Зарегистрируйся
 
JSON тоже вариант, но нативно он поддерживается только в верхних билдах PHP, а при использовании сторонних классов, не уверен что будет быстрее сериализации.
 
serialize() / unserialize(), но это очень медленно, лучше присматреться в сторону JSON: Для просмотра ссылки Войди или Зарегистрируйся

Врядли JSON быстрей. Плюс JSON в том, что ты можешь просто открыть егов других языках.

Если тебе надо трёх мерный масив то можешь

$arr[$x][$y][$z] = $a;

CREATE TABLE arr(
x INT NOT NULL,
y INT NOT NULL,
z INT NOT NULL,
a INT NOT NULL,
PRIMARY KEY (x, y, z)
)
 
вобщем то беру свои слова обратно))) json действительно проигрывает в скорасти сериализации, простой тестик:

Код:
<?php

$array = array();
for ($i = 0; $i < 50000; $i++)
{
    $array[] = rand() . ' :: ' . rand() . ' :: ' . rand();
}

$test1Start = microtime(true);
$str1Ser = serialize($array);
$str1Unser = unserialize($str1Ser);
echo 'test 1: ' . round(microtime(true) - $test1Start, 4) . ' sec<br />';

$test2Start = microtime(true);
$str2Ser = json_encode($array);
$str2Unser = json_decode($str2Ser);
echo 'test 2: ' . round(microtime(true) - $test2Start, 4) . ' sec<br />';

?>

:thenks:
 
А функция подобоные serialize функции есть в JS или AS?
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху