PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Описание: из Mysql
Поиск в теме | Версия для печати
Kubert
Отправлено: 23 Августа, 2011 - 17:15:48
Частый гость
Покинул форум
Сообщений всего: 186
Дата рег-ции: Февр. 2010
Помог: 3 раз(а)
Господа хотелось бы продолжить тему, так как достиг неких результатов, но не финишировал!
Даю все что имею!
БД:
CODE (
SQL ):
скопировать код в буфер обмена
id = обычный ID
pid = его родитель
sort = сортировка
name = имя
idObject = ссылка на какой- то id объекта ( это не важно)
id | pid | sort | name | idObject
1 | 0 | 9999 | Категория 1 | ###
2 | 1 | 9999 | Категория 1. 1 | ###
3 | 1 | 9999 | Категория 1. 2 | ###
4 | 3 | 9999 | Категория 1. 2. 1 | ###
5 | 4 | 9999 | Категория 1. 2. 1. 1 | ###
6 | 4 | 9999 | Категория 1. 2. 1. 2 | ###
7 | 0 | 9999 | Категория 2 | ###
8 | 0 | 9999 | Категория 3 | ###
и так далее...
ЗАДАЧА:
Необходимо преобразовать данные из MySQL в массив такого вида:
CODE (
htmlphp ):
скопировать код в буфер обмена
array ( 'id' => '1' , 'name' => 'Категория 1' , 'url' => '###' , 'tree' => array
( array ( 'id' => '2' , 'name' => 'Категория 1.1' , 'url' => '###' ) , array ( 'id' => '3' , 'name' => 'Категория 1.2' , 'url' => '###' , 'tree' => array
( array ( 'id' => '4' , 'name' => 'Категория 1.2.1' , 'url' => '###' , 'tree' => array
( array ( 'id' => '5' , 'name' => 'Категория 1.2.1.1' , 'url' => '###' ) , array ( 'id' => '6' , 'name' => 'Категория 1.2.1.2' , 'url' => '###' ) ) ) ,
) ) ,
) ) ,
array ( 'id' => '7' , 'name' => 'Категория 2' , 'url' => '###' ) , array ( 'id' => '8' , 'name' => 'Категория 3' , 'url' => '###' ) ) ;
ДЕЛАЮ ТАК:
mysql_connect("localhost","root","webmaster") or die (mysql_error());
mysql_select_db("mydemo") or die (mysql_error());
$queryresult = mysql_query('SELECT id,pid,name,idObject FROM category ORDER BY sort,id');
while($row = mysql_fetch_assoc($queryresult)){
$arrAll[] = array(
'id'=>$row['id'],
'pid'=>$row['pid'],
'name'=>$row['name'],
'idObject'=>$row['idObject']
);
}
Теперь осталось только "переконвертировать" массив из одного вида в другой с помощью рекурсивной функции.
Но у меня не выходит.
LIME
Отправлено: 23 Августа, 2011 - 17:52:34
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
ну если tree это и есть pid
то возможно так
только тут надо быть очень осторожным в построении базы чтоб не получилось бесконечного цикла изза рекурсии
(Добавление)
можно навсякий сделать проверку уровня вложенности
передавать еще и флаг вложенности инкриментируя его в вызове внутри фции
и проверять
при достижении максимальной вложенности чтото делать(Отредактировано автором: 23 Августа, 2011 - 17:52:58)
Kubert
Отправлено: 23 Августа, 2011 - 18:06:13
Частый гость
Покинул форум
Сообщений всего: 186
Дата рег-ции: Февр. 2010
Помог: 3 раз(а)
LIME
Чтото не работает...
CODE (
htmlphp ):
скопировать код в буфер обмена
mysql_connect("localhost","root","webmaster") or die (mysql_error());
mysql_select_db("mydemo") or die (mysql_error());
mysql_query("set character_set_client ='cp1251'");
mysql_query("set character_set_results ='cp1251'");
mysql_query("set collation_connection ='cp1251_general_ci'");
$queryresult = mysql_query('SELECT id,pid,name,idObject FROM category ORDER BY sort,id');
while($row = mysql_fetch_assoc($queryresult)){
$arrAll[] = array(
'id'=>$row['id'],
'pid'=>$row['pid'],
'name'=>$row['name'],
'idObject'=>$row['idObject']
);
}
function toTree(&$arrAll){
foreach($arrAll as &$val){
if(isset($val['pid'])){
$val['pid']=$arrAll['pid'];
toTree($val['pid']);
}
}
}
toTree($arrAll);
print_r($val);
LIME
Отправлено: 23 Августа, 2011 - 18:14:02
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
во первых надо делать вывод ошибок
вам бы указали что $val неопределен
ведь изменяется исходный массив
Kubert
Отправлено: 23 Августа, 2011 - 18:18:29
Частый гость
Покинул форум
Сообщений всего: 186
Дата рег-ции: Февр. 2010
Помог: 3 раз(а)
LIME
Тоже самое. только теперь у элемента pid равно "пустота"
Ну не тоже самое конечно, но не работает
(Отредактировано автором: 23 Августа, 2011 - 18:20:49)
LIME
Отправлено: 23 Августа, 2011 - 18:24:55
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
а точно
вкралась ошибка
вы попробуйте понять замысел и сами отлаживайте
Kubert
Отправлено: 23 Августа, 2011 - 18:35:57
Частый гость
Покинул форум
Сообщений всего: 186
Дата рег-ции: Февр. 2010
Помог: 3 раз(а)
LIME
Ты меня уж прости)!
Я пытаюсь понять, серьезно!
У тебя последний вариант работает?!
У меня 2 ошибки...
Notice: Undefined индекса: 1 вход / var/www/clients/client2/web7/web /test/26/index.php в строке 23
Фатальная ошибка: Только переменные могут быть переданы по ссылке в / var/www/clients/client2/web7/web /test/26/index.php в строке 24
Короче, буду пробывать, отпишу завтра или вечером... Сейчас уже не могу...
(Отредактировано автором: 23 Августа, 2011 - 18:37:23)
Поиск в теме | Версия для печати
Страниц (2): « 1 [2]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
Powered by ExBB FM 1.0 RC1. InvisionExBB