Здравствуйте, нужна помощь для создания фильтра У меня есть массив: Код (Text): Array ( [0] => Array ( [id] => 1 [title] => ASD [id_cat] => 1 [id_con] => 1 ) [1] => Array ( [id] => 2 [title] => ASD [id_cat] => 1 [id_con] => 1 ) [2] => Array ( [id] => 8 [title] => ASD [id_cat] => 2 [id_con] => 1 ) [3] => Array ( [id] => 14 [title] => ASD [id_cat] => 3 [id_con] => 1 ) [4] => Array ( [id] => 20 [title] => ASD [id_cat] => 4 [id_con] => 1 ) [5] => Array ( [id] => 3 [title] => BAD [id_cat] => 1 [id_con] => 2 ) [6] => Array ( [id] => 18 [title] => BAD [id_cat] => 4 [id_con] => 2 ) [7] => Array ( [id] => 19 [title] => BAD [id_cat] => 4 [id_con] => 2 ) [8] => Array ( [id] => 24 [title] => BAD [id_cat] => 5 [id_con] => 2 ) [9] => Array ( [id] => 25 [title] => BAD [id_cat] => 2 [id_con] => 2 ) [10] => Array ( [id] => 9 [title] => FID [id_cat] => 2 [id_con] => 3 ) ) Как сделать фильтр, чтобы на выходе получилось: id_cat -- всего id 1-----------3 2-----------3 3-----------1 4-----------3 5-----------1 Заранее спасибо!
Через ещё один массив такие штуки делаются: Код (PHP): // $src - ваш исходный массив $ids_in_cats = array (); foreach ($src as $item) { if (!isset($ids_in_cats[$item["id_cat"]])) $ids_in_cats[$item["id_cat"]] = 0; ++$ids_in_cats[$item["id_cat"]]; } print_r($ids_in_cats);
Большое спасибо! А не подскажешь, как грамотно сделать? Код (Text): # получить и отобразить результаты if (!empty($result)) { $arr = array(); while($row = mysql_fetch_array($result, MYSQL_ASSOC)) { $arr[] = $row; } // подсчитываем сколько материалов у категории $ids_in_cats = array (); foreach($arr as $item) { if (!isset($ids_in_cats[$item["id_cat"]])) $ids_in_cats[$item["id_cat"]] = 0; ++$ids_in_cats[$item["id_cat"]]; } print_r($ids_in_cats); } Чтобы получилось в итоге Код (Text): <table border="1" cellspacing="0"> <tr> <td>ID категории</td> <td>Название категории</td> <td>Кол-во материалов</td> </tr> <tr> <td>id_cat</td> <td>title</td> <td>ids_in_cats</td> </tr> </table> Зарание спасибо!
Код (PHP): $arr = array(); $echo = array(); $echo[] = '<table border="1" cellspacing="0">'; while($row = mysql_fetch_array($result, MYSQL_ASSOC)) { $arr[] = $row; $echo[] = '<tr> <td>ID категории</td> <td>Название категории</td> <td>Кол-во материалов</td> </tr> <tr> <td>'.$row[id_cat].'</td> <td>'.$row[title].'</td> <td>'.$row[ids_in_cats].'</td> </tr>' } $echo = implode("\n", $echo)."\n</table>";
hack3p, а в чём сложность-то? Хотя вообще, если из базы получаешь, такой подсчёт по-другому делается. Это всё можно в один запрос уместить, и MySQL сам всё с удовольствием посчитает. Только надо структуру базы знать
mkramer , вот держи дамп БД (3 таблицы) Код (Text): [-- -- Структура таблицы `categories` -- CREATE TABLE IF NOT EXISTS `categories` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(80) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ; -- -- Дамп данных таблицы `categories` -- INSERT INTO `categories` (`id`, `title`) VALUES (1, 'AAA'), (2, 'BBB'), (3, 'CCC'), (4, 'DDD'), (5, 'EEE'); -- -------------------------------------------------------- -- -- Структура таблицы `content` -- CREATE TABLE IF NOT EXISTS `content` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(80) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ; -- -- Дамп данных таблицы `content` -- INSERT INTO `content` (`id`, `title`) VALUES (1, 'ASD'), (2, 'BAD'), (3, 'FID'), (4, 'MUH'), (5, 'FQH'), (6, 'UKJ'), (7, 'MOI'), (8, 'ZSR'); -- -------------------------------------------------------- -- -- Структура таблицы `links` -- CREATE TABLE IF NOT EXISTS `links` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `id_cat` int(10) unsigned NOT NULL, `id_con` int(10) unsigned NOT NULL, PRIMARY KEY (`id`), KEY `id_con` (`id_cat`), KEY `id_cat` (`id_con`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=26 ; -- -- Дамп данных таблицы `links` -- INSERT INTO `links` (`id`, `id_cat`, `id_con`) VALUES (1, 1, 1), (2, 1, 1), (3, 1, 2), (4, 1, 4), (5, 1, 7), (8, 2, 1), (9, 2, 3), (10, 2, 6), (11, 2, 4), (12, 2, 5), (13, 3, 5), (14, 3, 1), (15, 3, 3), (16, 3, 7), (17, 4, 7), (18, 4, 2), (19, 4, 2), (20, 4, 1), (21, 4, 8), (22, 5, 8), (23, 5, 4), (24, 5, 2), (25, 2, 2); -- -- Ограничения внешнего ключа сохраненных таблиц -- -- -- Ограничения внешнего ключа таблицы `links` -- ALTER TABLE `links` ADD CONSTRAINT `links_ibfk_1` FOREIGN KEY (`id_con`) REFERENCES `content` (`id`) ON UPDATE CASCADE, ADD CONSTRAINT `links_ibfk_2` FOREIGN KEY (`id_cat`) REFERENCES `categories` (`id`) ON DELETE CASCADE; Буду тебе благодарен!)