PHP MySQL создает древовидную иерархию и их количество

Я все еще новичок в PHP & MySQL. Эта очередь выглядит простой, но почему-то я не могу изобразить рекурсивные формулы для создания древовидной иерархии при правильном использовании foreach и array.

Это структура таблицы

 CREATE TABLE IF NOT EXISTS `table` (
`id` int(2) NOT NULL,
`lecturer` varchar(50) NOT NULL,
`subject` varchar(9) NOT NULL,
`section` int(2) NOT NULL
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

INSERT INTO `table` (`id`, `lecturer`, `subject`, `section`) VALUES
(1, 'Prof A', 'info2222', 1),
(2, 'Prof A', 'info2222', 2),
(3, 'Prof A', 'info3333', 1),
(4, 'Prof A', 'info3333', 3),
(5, 'Prof B', 'info4444', 1);

Это пример вывода, который я хочу:

=================================================
|  lecturer > subject > section |  count total  |
=================================================
|  Prof A                       |   4           |
|  |---info2222                 |   2           |
|  |    |---1                   |   1           |
|  |    |---2                   |   1           |
|  |                            |               |
|  |---info3333                 |   2           |
|       |---1                   |   1           |
|       |---3                   |   1           |
|                               |               |
|  Prof B                       |   1           |
|   |---info4444                |   1           |
|       |---1                   |   1           |
=================================================

мой полный код (в настоящее время)

<html>
<head>
<?php

mysql_select_db('testing',mysql_connect('localhost','root',''))or die(mysql_error());

function count_recursive($array)
{
$c = 0;
foreach($array as $value)
{
if(is_array($value))
$c += count_recursive($value);
else
$c++;
return $c;
}
}

?>

</head>

<body>

<?php

$query = $pdo->query("Select * from table");
$arr = [];
while($data = $query->fetch())
{
$arr[$data['lecturer']][$data['subject']][] = $data['section'];
}

foreach($arr as $lecturer => $lvalues)
{
echo $query['lecturer'] ;
foreach($lvalues as $subject => $svalues)
{
echo $query['subject'] ;
foreach($svalues as $section)
{
echo $query['section'] ;
}
}
}

?>

</body>
</html>

1

Решение

Примерно так должно работать:

$query = $pdo->query("Your select...");
$arr = [];
while($data = $query->fetch()){
$arr[$data['lecturer']][$data['subject']][] = $data['section'];
}

После этого вы можете использовать массив (3d):

foreach($arr as $lecturer => $lvalues){
//echo your lecturer here
foreach($lvalues as $subject => $svalues){
//echo your subject here
foreach($svalues as $section)
//echo sour section here
}

чтобы посчитать все рекурсивно, вы можете использовать:

function count_recursive($array){
$c = 0;
foreach($array as $value)
if(is_array($value))
$c += count_recursive($value);
else
$c++;
return $c;
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector