За последние 24 часа нас посетили 17754 программиста и 1715 роботов. Сейчас ищут 869 программистов ...

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

Тема в разделе "Решения, алгоритмы", создана пользователем 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.600
    Симпатии:
    1.764
    Через ещё один массив такие штуки делаются:
    Код (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.818
    Симпатии:
    1.333
    Адрес:
    Лень
    Код (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.600
    Симпатии:
    1.764
    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.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    Код (Text):
    1. SELECT `id_cat`, COUNT(*) AS `cnt`
    2. FROM `links`
    3. GROUP BY `id_cat`