Иногда web-разработчику необходимо хранить массив в БД, но в MySQL нет такого типа данных, как массив. Как же организовать их хранение? На самом деле, способов хранения массивов существует большое количество. Я расскажу вам 2 действенных, простых и быстрых способа, как это осуществлять. Я буду описывать их на примере MySQL, но они так же применимы и к cookies.
Упаковка массива в строку.
Для этого необходимо содержимое нашего массива записать в строку, а каждый элемент отделить символом (таким, который точно не может входить в состав элементов). К примеру, если мы храним в массиве только числовые данные, то разделять их можно символом ;.
К примеру, дан массив $mas[1]=5; $mas[2]=7; $mas[3]=9; $mas[4]=15; $mas[5]=1;
Нам необходимо записать все данные массива таким образом, чтобы у нас получилась строка $s=«5;7;9;15;1»;
Это можно организовать с помощью цикла перебора массива foreach()
Получившуюся строку необходимо записать в БД (соответственно в поле с типом varchar, text и т.п.).
Как же нам собрать массив заново? — спросите вы. А очень просто. Для этого достаточно использовать функцию explode();
Использование функции serialize() и unserialize()
При использовании описанного выше способа возникнут сложности с двухмерным массивом, а так же ассоциативным массивом, но и их можно решить путем исправления функции (к примеру использовать 2 разных типа знака и разбивать сначала по одному знаку, а затем каждый получившийся элемент по другому знаку), но это приведет к увеличению кода, а значит к возможности появления ошибки и замедлению выполнения. И разработчики php пришли на помощь web-программистам, создав специальные функции serialize() и unserialize().
Функция serialize() возвращает строку, являющуюся упакованным эквивалентом некоего объекта $obj, переданного в параметре.
Общий вид: string serialize(mixed $obj);
Применив функцию к массиву:
После этого достаточно к строке $str применить функцию Unserialize() и мы получим исходный массив. Так же с помощью этих функций можно упаковывать любой объект и хранить его либо в БД либо в куках.
Стоит заметить, что данные функции весьма производительны, но объем упакованных данных получается слишком большой, чем при использовании первого способа. Но преимущества второго на лицо.
Упаковка массива в строку.
Для этого необходимо содержимое нашего массива записать в строку, а каждый элемент отделить символом (таким, который точно не может входить в состав элементов). К примеру, если мы храним в массиве только числовые данные, то разделять их можно символом ;.
К примеру, дан массив $mas[1]=5; $mas[2]=7; $mas[3]=9; $mas[4]=15; $mas[5]=1;
Нам необходимо записать все данные массива таким образом, чтобы у нас получилась строка $s=«5;7;9;15;1»;
Это можно организовать с помощью цикла перебора массива foreach()
Получившуюся строку необходимо записать в БД (соответственно в поле с типом varchar, text и т.п.).
Как же нам собрать массив заново? — спросите вы. А очень просто. Для этого достаточно использовать функцию explode();
<?php
$s="1;2;3;4;5;10;15";
$s1=explode(";",$s);
foreach($s1 as $val)
echo $val."<br>";
?>
Использование функции serialize() и unserialize()
При использовании описанного выше способа возникнут сложности с двухмерным массивом, а так же ассоциативным массивом, но и их можно решить путем исправления функции (к примеру использовать 2 разных типа знака и разбивать сначала по одному знаку, а затем каждый получившийся элемент по другому знаку), но это приведет к увеличению кода, а значит к возможности появления ошибки и замедлению выполнения. И разработчики php пришли на помощь web-программистам, создав специальные функции serialize() и unserialize().
Функция serialize() возвращает строку, являющуюся упакованным эквивалентом некоего объекта $obj, переданного в параметре.
Общий вид: string serialize(mixed $obj);
Применив функцию к массиву:
$mas[1]=1;
$mas[2]=2;
$mas[3]=3;
$mas[4]=4;
$mas[5]=5;
$mas[6]=10;
$mas[7]=15;
$str=serialize($mas);
echo $str; ///получим на экран что-то вида a:7:{i:1;i:1;i:2;i:2;i:3;i:3;i:4;i:4;i:5;i:5;i:6;i:10;i:7;i:15;}
После этого достаточно к строке $str применить функцию Unserialize() и мы получим исходный массив. Так же с помощью этих функций можно упаковывать любой объект и хранить его либо в БД либо в куках.
Стоит заметить, что данные функции весьма производительны, но объем упакованных данных получается слишком большой, чем при использовании первого способа. Но преимущества второго на лицо.