За последние 24 часа нас посетил 69651 программист и 3580 роботов. Сейчас ищут 2828 программистов ...

Фильтр для массива

Тема в разделе "Решения, алгоритмы", создана пользователем hack3p, 1 июл 2014.

  1. hack3p

    hack3p Новичок

    С нами с:
    1 июл 2014
    Сообщения:
    12
    Симпатии:
    0
    Здравствуйте, нужна помощь для создания фильтра
    У меня есть массив:


    Код (Text):
    1.        
    2. Array
    3. (
    4.     [0] => Array
    5.         (
    6.             [id] => 1
    7.             [title] => ASD
    8.             [id_cat] => 1
    9.             [id_con] => 1
    10.         )
    11.  
    12.     [1] => Array
    13.         (
    14.             [id] => 2
    15.             [title] => ASD
    16.             [id_cat] => 1
    17.             [id_con] => 1
    18.         )
    19.  
    20.     [2] => Array
    21.         (
    22.             [id] => 8
    23.             [title] => ASD
    24.             [id_cat] => 2
    25.             [id_con] => 1
    26.         )
    27.  
    28.     [3] => Array
    29.         (
    30.             [id] => 14
    31.             [title] => ASD
    32.             [id_cat] => 3
    33.             [id_con] => 1
    34.         )
    35.  
    36.     [4] => Array
    37.         (
    38.             [id] => 20
    39.             [title] => ASD
    40.             [id_cat] => 4
    41.             [id_con] => 1
    42.         )
    43.  
    44.     [5] => Array
    45.         (
    46.             [id] => 3
    47.             [title] => BAD
    48.             [id_cat] => 1
    49.             [id_con] => 2
    50.         )
    51.  
    52.     [6] => Array
    53.         (
    54.             [id] => 18
    55.             [title] => BAD
    56.             [id_cat] => 4
    57.             [id_con] => 2
    58.         )
    59.  
    60.     [7] => Array
    61.         (
    62.             [id] => 19
    63.             [title] => BAD
    64.             [id_cat] => 4
    65.             [id_con] => 2
    66.         )
    67.  
    68.     [8] => Array
    69.         (
    70.             [id] => 24
    71.             [title] => BAD
    72.             [id_cat] => 5
    73.             [id_con] => 2
    74.         )
    75.  
    76.     [9] => Array
    77.         (
    78.             [id] => 25
    79.             [title] => BAD
    80.             [id_cat] => 2
    81.             [id_con] => 2
    82.         )
    83.  
    84.     [10] => Array
    85.         (
    86.             [id] => 9
    87.             [title] => FID
    88.             [id_cat] => 2
    89.             [id_con] => 3
    90.         )
    91. )
    Как сделать фильтр, чтобы на выходе получилось:

    id_cat -- всего id
    1-----------3
    2-----------3
    3-----------1
    4-----------3
    5-----------1

    Заранее спасибо!
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.496
    Симпатии:
    1.725
    Через ещё один массив такие штуки делаются:
    Код (PHP):
    1. // $src - ваш исходный массив
    2. $ids_in_cats = array ();
    3. foreach ($src as $item) {
    4.    if (!isset($ids_in_cats[$item["id_cat"]]))
    5.        $ids_in_cats[$item["id_cat"]] = 0;
    6.   ++$ids_in_cats[$item["id_cat"]];
    7. }
    8.  
    9. print_r($ids_in_cats);
    10.  
     
  3. hack3p

    hack3p Новичок

    С нами с:
    1 июл 2014
    Сообщения:
    12
    Симпатии:
    0
    Большое спасибо!
    А не подскажешь, как грамотно сделать?


    Код (Text):
    1.  
    2.         # получить и отобразить результаты
    3.         if (!empty($result))
    4.         {
    5.             $arr = array();
    6.             while($row = mysql_fetch_array($result, MYSQL_ASSOC))
    7.             {
    8.                 $arr[] = $row;
    9.             }
    10.  
    11.             // подсчитываем сколько материалов у категории
    12.             $ids_in_cats = array ();
    13.  
    14.             foreach($arr as $item)
    15.             {
    16.                 if (!isset($ids_in_cats[$item["id_cat"]]))
    17.                     $ids_in_cats[$item["id_cat"]] = 0;
    18.  
    19.                 ++$ids_in_cats[$item["id_cat"]];
    20.             }
    21.  
    22.             print_r($ids_in_cats);
    23.  
    24.         }
    Чтобы получилось в итоге
    Код (Text):
    1.  
    2. <table border="1" cellspacing="0">
    3.         <tr>
    4.             <td>ID категории</td>
    5.             <td>Название категории</td>
    6.             <td>Кол-во материалов</td>
    7.         </tr>
    8.          <tr>
    9.             <td>id_cat</td>
    10.             <td>title</td>
    11.             <td>ids_in_cats</td>
    12.         </tr>
    13. </table>
    Зарание спасибо!
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.832
    Симпатии:
    1.335
    Адрес:
    Лень
    Код (PHP):
    1. $arr = array();
    2. $echo = array();
    3. $echo[] = '<table border="1" cellspacing="0">';
    4. while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    5. $arr[] = $row;
    6. $echo[] = '<tr>
    7. <td>ID категории</td>
    8. <td>Название категории</td>
    9. <td>Кол-во материалов</td>
    10. </tr>
    11. <tr>
    12. <td>'.$row[id_cat].'</td>
    13. <td>'.$row[title].'</td>
    14. <td>'.$row[ids_in_cats].'</td>
    15. </tr>'
    16. }
    17. $echo = implode("\n", $echo)."\n</table>";
     
  5. hack3p

    hack3p Новичок

    С нами с:
    1 июл 2014
    Сообщения:
    12
    Симпатии:
    0
    MAN_IFE_ST, не работает твой вариант :(
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.496
    Симпатии:
    1.725
    hack3p, а в чём сложность-то? Хотя вообще, если из базы получаешь, такой подсчёт по-другому делается. Это всё можно в один запрос уместить, и MySQL сам всё с удовольствием посчитает. Только надо структуру базы знать
     
  7. hack3p

    hack3p Новичок

    С нами с:
    1 июл 2014
    Сообщения:
    12
    Симпатии:
    0
    mkramer , вот держи дамп БД (3 таблицы)
    Код (Text):
    1. [--
    2. -- Структура таблицы `categories`
    3. --
    4.  
    5. CREATE TABLE IF NOT EXISTS `categories` (
    6.   `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    7.   `title` varchar(80) NOT NULL,
    8.   PRIMARY KEY (`id`)
    9. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;
    10.  
    11. --
    12. -- Дамп данных таблицы `categories`
    13. --
    14.  
    15. INSERT INTO `categories` (`id`, `title`) VALUES
    16. (1, 'AAA'),
    17. (2, 'BBB'),
    18. (3, 'CCC'),
    19. (4, 'DDD'),
    20. (5, 'EEE');
    21.  
    22. -- --------------------------------------------------------
    23.  
    24. --
    25. -- Структура таблицы `content`
    26. --
    27.  
    28. CREATE TABLE IF NOT EXISTS `content` (
    29.   `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    30.   `title` varchar(80) NOT NULL,
    31.   PRIMARY KEY (`id`)
    32. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ;
    33.  
    34. --
    35. -- Дамп данных таблицы `content`
    36. --
    37.  
    38. INSERT INTO `content` (`id`, `title`) VALUES
    39. (1, 'ASD'),
    40. (2, 'BAD'),
    41. (3, 'FID'),
    42. (4, 'MUH'),
    43. (5, 'FQH'),
    44. (6, 'UKJ'),
    45. (7, 'MOI'),
    46. (8, 'ZSR');
    47.  
    48. -- --------------------------------------------------------
    49.  
    50. --
    51. -- Структура таблицы `links`
    52. --
    53.  
    54. CREATE TABLE IF NOT EXISTS `links` (
    55.   `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    56.   `id_cat` int(10) unsigned NOT NULL,
    57.   `id_con` int(10) unsigned NOT NULL,
    58.   PRIMARY KEY (`id`),
    59.   KEY `id_con` (`id_cat`),
    60.   KEY `id_cat` (`id_con`)
    61. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=26 ;
    62.  
    63. --
    64. -- Дамп данных таблицы `links`
    65. --
    66.  
    67. INSERT INTO `links` (`id`, `id_cat`, `id_con`) VALUES
    68. (1, 1, 1),
    69. (2, 1, 1),
    70. (3, 1, 2),
    71. (4, 1, 4),
    72. (5, 1, 7),
    73. (8, 2, 1),
    74. (9, 2, 3),
    75. (10, 2, 6),
    76. (11, 2, 4),
    77. (12, 2, 5),
    78. (13, 3, 5),
    79. (14, 3, 1),
    80. (15, 3, 3),
    81. (16, 3, 7),
    82. (17, 4, 7),
    83. (18, 4, 2),
    84. (19, 4, 2),
    85. (20, 4, 1),
    86. (21, 4, 8),
    87. (22, 5, 8),
    88. (23, 5, 4),
    89. (24, 5, 2),
    90. (25, 2, 2);
    91.  
    92. --
    93. -- Ограничения внешнего ключа сохраненных таблиц
    94. --
    95.  
    96. --
    97. -- Ограничения внешнего ключа таблицы `links`
    98. --
    99. ALTER TABLE `links`
    100.   ADD CONSTRAINT `links_ibfk_1` FOREIGN KEY (`id_con`) REFERENCES `content` (`id`) ON UPDATE CASCADE,
    101.   ADD CONSTRAINT `links_ibfk_2` FOREIGN KEY (`id_cat`) REFERENCES `categories` (`id`) ON DELETE CASCADE;
    Буду тебе благодарен!)
     
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.122
    Симпатии:
    1.222
    Адрес:
    там-сям
    Код (Text):
    1. SELECT `id_cat`, COUNT(*) AS `cnt`
    2. FROM `links`
    3. GROUP BY `id_cat`