Вывести только уникальные значения?

233
26 ноября 2016, 20:16

Всем привет. Есть такой вот массив.

Array (
    0 => Array ([tav_title] => 'Для Женщин', [tac_title] => 'Для кого' ),
    1 => Array ([tav_title] => 'Серебро 925', [tac_title] => 'Металл' ),
    2 => Array ([tav_title] => 'Фианит', [tac_title] => 'Вставка' ),
    3 => Array ([tav_title] => 'Горный хрусталь' [tac_title] => 'Вставка' ),
    4 => Array ([tav_title] => 'SOKOLOV' [tac_title] => 'Бренд'),
); 

Вывожу его вот так:

<?php foreach ($res as $item):?>
    <b><?= $item['tac_title'] ?></b>: <?= $item['tav_title'] ?><br> 
<? endforeach;?>

Выглядит он так:

Для кого: Для Женщин
Металл: Серебро 925
Вставка: Фианит
Вставка: Горный хрусталь
Бренд: SOKOLOV

Как видно, поле вставка повторяется несколько раз, а значение разное. Как можно вывести вот так?

Для кого: Для Женщин
Металл: Серебро 925
Вставка: Фианит, Горный хрусталь
Бренд: SOKOLOV

Если поможет, то ниже MySql запрос.

SELECT `t_a_v`.`title` AS 'tav_title', `t_a_c`.`title` AS 'tac_title'
FROM `tm_attr_value` AS `t_a_v` 
LEFT JOIN `tm_attr_category` AS `t_a_c`
    ON `t_a_c`.`id` = `t_a_v`.`id_attr_category`
WHERE `t_a_v`.`id` = '$attrValue'
Answer 1

В таких случаях я всегда делаю, предподготовку данных перед выводом:

$result = [ // результат выполнения sql
    0 => Array ([tav_title] => 'Для Женщин', [tac_title] => 'Для кого' ),
    1 => Array ([tav_title] => 'Серебро 925', [tac_title] => 'Металл' ),
    2 => Array ([tav_title] => 'Фианит', [tac_title] => 'Вставка' ),
    3 => Array ([tav_title] => 'Горный хрусталь', [tac_title] => 'Вставка' ),
    4 => Array ([tav_title] => 'SOKOLOV', [tac_title] => 'Бренд'),
];
// подготовка данных
$data = [];
foreach($result => $item) {
    $data[$item[tac_title]] = $item[tav_title];
}
// таким образом получу подходящий массив $data:
// 'Для кого' => 'Для Женщин',
// 'Металл' => 'Серебро 925',
// 'Вставка' => ['Фианит', 'Горный хрусталь'],
// 'Бренд' => 'SOKOLOV',
// вывод
<?php foreach ($data as $key => $value):?>
    <b><?= $key ?></b>: 
    <?php if (is_array($value)) {
        foreach($value as $elem) {
            echo $elem.',';
        }
    } else {
        echo $value;
    }
    ?><br> 
<? endforeach;?>
Answer 2

Попробуйте так:

SELECT t_a_c.title as tac_title, GROUP_CONCAT(DISTINCT t_a_v.title ORDER BY t_a_v.title ASC SEPARATOR ', ') AS tav_title
FROM tm_attr_value t_a_v 
LEFT JOIN tm_attr_category t_a_c ON t_a_c.id = t_a_v.id_attr_category
WHERE t_a_v.id = '$attrValue'
READ ALSO
Вывод из mySQL timestamp в UNIX виде

Вывод из mySQL timestamp в UNIX виде

В базе хранится дата и время в виде 2012-09-25 12:31:130 Правильно я понимаю, что на самом деле содержимое просто так отображается, но хранится в формате...

262
Таблицы html, вывод данных из бд в таблицу php

Таблицы html, вывод данных из бд в таблицу php

Когда я пытался вывести данные из таблицы в бд, в таблицу на странице сайта, то столкнулся нос в нос с проблемой вывода тк

508
Как изменять нужные данные в базе данных?

Как изменять нужные данные в базе данных?

Всем привет! Прошу прощения за глупую формулировку вопроса! Не придумал лучшеТяжело описать вопрос поэтому я его нарисовал) Надеюсь поймете!...

231
Функция &ldquo;Экспорт&rdquo;

Функция “Экспорт”

Функция "Экспорт" оперирует с самой базой данных или создает копию?

249