Array
(
[индекс1] => значение1
[индекс2] => Array
(
[0] => уровень1
[#] => уровень1 значение2
)
[кот] => Array
(
[r] => урокень1 значение Н
[кент] => Array
(
[2] => уровень2 значение 1
[t] => уровень 2значение 2
)
)
)
Спустя 3 минуты, 27 секунд (18.10.2010 - 11:16) Guest написал(а):
подскажите, пожалуйста, если кто сталкивался , как структурировать и записать в mysql многомерный массив вида :
Array
(
[индекс1] => значение1
[индекс2] => Array
(
[0] => уровень1
[#] => уровень1 значение2
)
[кот] => Array
(
[r] => урокень1 значение Н
[php][кент] => Array
(
[2] => уровень2 значение 1
[t] => уровень 2значение 2
)
)
)
Спустя 48 секунд (18.10.2010 - 11:17) Michael написал(а):
посмотри serialize - может подойдет.
Спустя 3 минуты, 51 секунда (18.10.2010 - 11:21) abugabi написал(а):
serialize не подходит она подходит для хранения , мне же надо этот массив разобрать т.е. вытащить значения и определить родителя.
Спустя 2 минуты, 46 секунд (18.10.2010 - 11:23) linker написал(а):
Рекурсия не?
Спустя 54 секунды (18.10.2010 - 11:24) Michael написал(а):
А таблица mysql у тебя:
?
А так - рекурсией, как же еще.
уровень | значение
?
А так - рекурсией, как же еще.
Спустя 1 минута, 52 секунды (18.10.2010 - 11:26) abugabi написал(а):
рекурсия да, только как?) не могу сообразить
таблица
child (он же primary key) parent value
таблица
child (он же primary key) parent value
Спустя 4 минуты, 1 секунда (18.10.2010 - 11:30) Guest написал(а):
хотя бы идею подкинте , а код я уже сам напишу)
Спустя 36 секунд (18.10.2010 - 11:31) Michael написал(а):
Спустя 1 час, 43 минуты, 40 секунд (18.10.2010 - 13:15) sergeiss написал(а):
Другой вариант - используй PostgreSQL. Там это делается достаточно просто
Например, вот тут я писал уже http://phpforum.ru/index.php?showtopic=31806&hl=
Там показана полная выборка всего дерева, но можно сделать и поиск, и выборку начиная с какого-то уровня.

Там показана полная выборка всего дерева, но можно сделать и поиск, и выборку начиная с какого-то уровня.
Спустя 28 минут, 32 секунды (18.10.2010 - 13:43) abugabi написал(а):
про PostgreSQL хорошая идея, но к сожалению нет возможности использовать ее по разным причинам.
Спустя 2 часа, 32 минуты, 8 секунд (18.10.2010 - 16:15) arvitaly написал(а):
Спустя 1 час, 32 минуты, 48 секунд (18.10.2010 - 17:48) abugabi написал(а):
методы как записать двевовидные данные я знаю , с этим проблем нет :-), и не один способ, и рекурсию я знаю, много с ней работал, вопрос в другом, как правильно сделать обход многомерного массива такого вида:
и запись его в базу.
Сделал рекурсивную функцию:
она обходит каждый узел, то значение которое не массив сохраняет в одномерный массив $result, тут все просто, вот как то щас структуру еще сохранить, что у [0] => уровень1 есть родитель [индекс2] => Array и это потом занести в базу!?
Array
(
[индекс1] => значение1
[индекс2] => Array
(
[0] => уровень1
[катя] => уровень1 значение2
)
[кот] => Array
(
[r] => урокень1 значение Н
[php][кент] => Array
(
[2] => уровень2 значение 1
[t] => уровень 2значение 2
)
)
)
и запись его в базу.
Сделал рекурсивную функцию:
, результат работы :
function arr_rec($ind,$massive)
{
global $result,$i,$r,$parent;
foreach ($massive as $index=>$value)
{
if (gettype($value)=='array') {
arr_rec($index,$value);
} else {
$result[$index]=$value;
}
}
echo '<br>';
}
arr_rec('0',$arr);
echo '<pre>';
print_r($result);
echo '</pre>';
Array
(
[индекс1] => значение1
[0] => уровень1
[#] => уровень1 значение2
[2] => уровень2 значение 1
[t] => уровень 2значение 2
[r] => урокень1 значение Н
)
она обходит каждый узел, то значение которое не массив сохраняет в одномерный массив $result, тут все просто, вот как то щас структуру еще сохранить, что у [0] => уровень1 есть родитель [индекс2] => Array и это потом занести в базу!?
Спустя 12 минут, 40 секунд (18.10.2010 - 18:01) arvitaly написал(а):
Цитата |
она обходит каждый узел, то значение которое не массив сохраняет в одномерный массив $result, тут все просто, вот как то щас структуру еще сохранить, что у [0] => уровень1 есть родитель [индекс2] => Array и это потом занести в базу!? |
не понял, давайте лучше на примере, начальный массив я уже вижу, функция рекурсиитоже, как у вас это хранится в базе?
Спустя 1 час, 20 минут, 23 секунды (18.10.2010 - 19:21) linker написал(а):
Обход по дереву - рекурсия. Запись в базу зависит от структуру таблицы.
Спустя 13 часов, 39 минут, 21 секунда (19.10.2010 - 09:00) Guest написал(а):
структура базы для массива
0- самый самый родительский элемент
:
Array
(
[индекс1] => значение1
[индекс2] => Array
(
[0] => уровень1
[катя] => уровень1 значение2
)
[кот] => Array
(
[r] => урокень1 значение Н
[кент] => Array
(
[2] => уровень2 значение 1
[t] => уровень 2значение 2
)
)
)
0- самый самый родительский элемент
сhild(auto_increment) parent index value
1 0 индекс1 значение1
2 0 индекс2 NULL
3 2 0 уровень1
4 2 катя уровень1 значение2
5 0 кот NULL
6 5 r урокень1 значение Н
7 5 кент NULL
8 7 2 уровень2 значение 1
9 7 t уровень 2значение 2
Спустя 29 минут, 3 секунды (19.10.2010 - 09:29) linker написал(а):
Как-то так, дальше думай сам
function childs($node, $parent)
{
foreach($node as $index => $value)
{
if (is_array($value))
{
mysql_query("INSERT INTO 'table' VALUES(0, '$parent', '$index', NULL)");
childs($value, mysql_insert_id());
}
else
mysql_query("INSERT INTO 'table' VALUES(0, '$parent', '$index', '$value')");
$absolute ++;
}
}
childs($Array, 0);
Спустя 23 часа, 45 минут, 3 секунды (20.10.2010 - 09:14) abugabi написал(а):
спб linker, function childs самый раз, только не хотела работать запись :
p.s. путевый сайтик надо бы зарегистрироваться), два раза обращаюсь, два раза помогают
, поэтому заменил ее стандартной :
mysql_query("INSERT INTO 'table' VALUES(0, '$parent', '$index', NULL)");
mysql_query("INSERT INTO table (parent,ind,val) VALUES ('$parent','$index','NULL')");
p.s. путевый сайтик надо бы зарегистрироваться), два раза обращаюсь, два раза помогают
