[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: структурировать многомерный массив
abugabi
подскажите, пожалуйста, если кто сталкивался , как структурировать и записать в mysql многомерный массив вида :
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

Спустя 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. Там это делается достаточно просто smile.gif Например, вот тут я писал уже 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 написал(а):
методы как записать двевовидные данные я знаю , с этим проблем нет :-), и не один способ, и рекурсию я знаю, много с ней работал, вопрос в другом, как правильно сделать обход многомерного массива такого вида:

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 написал(а):
структура базы для массива

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 самый раз, только не хотела работать запись :

mysql_query("INSERT INTO 'table' VALUES(0, '$parent', '$index', NULL)");
, поэтому заменил ее стандартной :

mysql_query("INSERT INTO table (parent,ind,val) VALUES ('$parent','$index','NULL')");


p.s. путевый сайтик надо бы зарегистрироваться), два раза обращаюсь, два раза помогают wink.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.