Сохранять значения многомерного массива в MySQL (PHP) - PullRequest
3 голосов
/ 31 марта 2011

У меня есть большой многомерный массив, который я хотел бы сохранить в базе данных MySQL.

Ниже приведен пример рассматриваемого массива:

Array
(
    [user1] =>
        [name] => abc
        ...
        [address] => xyz
    ...
    ...
    [user2] =>
        [name] => abc
        ...
        [address] => xyz
}

Значения массива и столбцы таблицы базы данных совпадают (кроме rowid в базе данных). Я видел различные способы сделать что-то подобное, но не нашел способа, который бы работал в этом решении.

Большое спасибо:)

Обновление

Обновлена ​​структура массива, чтобы дать более четкое представление о том, что находится в самом массиве.

Ответы [ 6 ]

2 голосов
/ 31 марта 2011

Обычно, когда у вас есть такие вложенные данные, имеет смысл иметь две таблицы: одну для родительской и одну для дочерней, для наиболее эффективного доступа к данным.Родительская таблица будет иметь «Parent ID» и любые данные родительского уровня, а дочерняя таблица будет иметь «Child ID», внешний ключ «Parent ID» и дочерние данные (в вашем примере - трехсимвольную строку).

0 голосов
/ 31 марта 2011

В итоге я нашел время, чтобы использовать цикл for и добиться следующего:

for ($i = 0; $i < 25; $i++)
    {
        $name = $parts[$i][0];
        $address = $parts[$i][22];

        // Run SQL query using the variable values rather than the array values.
    }

Я уверен, что есть более изощренный способ добиться этого, но пока это работает!

Спасибо всем.

0 голосов
/ 31 марта 2011

создать одномерный массив с сериализованными элементами.Вы вставите только одну строку, и каждый столбец будет содержать сериализованные массивы

0 голосов
/ 31 марта 2011

Если вы собираетесь хранить произвольно глубоко вложенные массивы, то лучшим выбором будет либо json_encode() / json_decode(), либо serialize() / unserialize(). Единственная проблема - вы не сможете запрашивать данные интуитивно.

Как уже упоминалось, моделирование ваших таблиц в соответствии было бы оптимальным.

0 голосов
/ 31 марта 2011

Если вам нужно сохранить сам массив, используйте serialize () и unserialize () , чтобы сохранить массив в виде строки в базе данных. Гораздо лучше, чем вариант json, о котором упоминал ранее Голландец, поскольку у json могут быть проблемы с многомерными массивами.

Или вы хотите сохранить значения в связанных записях в БД?

0 голосов
/ 31 марта 2011

Вы пробовали json_encode ? Вы можете превратить ваш массив в строку, сохранить его и затем использовать json_decode , чтобы вернуть его обратно.

LIVE DEMO

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...