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

Тема в разделе "Базы данных", создана пользователем the_stalker, 21 фев 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. the_stalker

    the_stalker Постоялец

    Регистр.:
    19 фев 2007
    Сообщения:
    116
    Симпатии:
    3
    Как хранить многомерные массивы в реляцинной БД?
     
  2. Lomar

    Lomar Создатель

    Регистр.:
    10 янв 2008
    Сообщения:
    15
    Симпатии:
    3
    Правильный ответ - никак. Потому что реляционная модель этого не позволяет (сцылко)
    Но извращаться можно всегда. Например хранить многомерный массив как текст с некоторыми разделителями.

    Например
    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
    
    Общая суть вопроса: необходимо написать конвертер массив=>текст и текст=>массив
     
  3. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    да не надо ничего писать - есть такое понятие как сериализация.
     
    Lomar нравится это.
  4. edson

    edson Прохожие

    Для PHP ,например, -

    unserialize()
    serialize()
     
  5. andead

    andead Создатель

    Регистр.:
    11 ноя 2007
    Сообщения:
    30
    Симпатии:
    11
  6. masto

    masto Прохожие

    JSON тоже вариант, но нативно он поддерживается только в верхних билдах PHP, а при использовании сторонних классов, не уверен что будет быстрее сериализации.
     
  7. n42

    n42

    Регистр.:
    8 фев 2008
    Сообщения:
    206
    Симпатии:
    25
    Врядли 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)
    )
     
  8. andead

    andead Создатель

    Регистр.:
    11 ноя 2007
    Сообщения:
    30
    Симпатии:
    11
    вобщем то беру свои слова обратно))) 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:
     
  9. Grizzli

    Grizzli Писатель

    Регистр.:
    27 дек 2006
    Сообщения:
    4
    Симпатии:
    0
    А функция подобоные serialize функции есть в JS или AS?
     
  10. n42

    n42

    Регистр.:
    8 фев 2008
    Сообщения:
    206
    Симпатии:
    25
    сматри JSON
     
Статус темы:
Закрыта.