Вывод не дублирующих(уникальных) данных с базы,разбить строку?

usergeyv

Знаток
Регистрация
5 Июл 2013
Сообщения
152
Реакции
25
Небольшой код, который выводит значения столбца xfields
PHP:
<?php
if( ! defined( 'DATALIFEENGINE' ) ) { die( "Hacking attempt!" ); }

$xflist = dle_cache( $xfname, $config['skin'] );
if(!$xflist) {
$sql_result = $db->query( "SELECT xfields FROM " . PREFIX . "_post WHERE 
approve=1" );
while ( $rows = $db->get_row( $sql_result ) ) {
    $xfields[] = $rows;
}   
$stack = array();
foreach($xfields as $value){
    if($value[xfields]){
        $row = xfieldsdataload($value[xfields]);
        if($row[$xfname]){
            $rowdata = explode( "~", $row[$xfname]);
            foreach($rowdata as $value){
                if($value){
                    $value = trim($value);
                    array_unshift($stack, $value);
                }
            }
        }
    }
}
$stack = array_unique($stack);
sort ($stack); 
foreach( $stack as $value ){
    $xflist .= "<li><a href='/xfsearch/" . $value . "'>" . $value . "</a>
</li>\n";
}
create_cache( $xfname, $xflist, $config['skin'] );
}
echo "<ul>" . $xflist . "</ul>";
?>
Подключения на станице

Код:
{include file="/engine/modules/xflist.php?xfname=zhanr-kino"}
Значения в базе:

Код:
zhanr-kino|Детектив,Драма,Криминал
или
zhanr-kino|Драма
По zhanr-kino мне выводятся нужные данные, но вот такого вида:
Код:
........
Боевик,Криминал,Триллер
Боевик,Фантастика
Детектив,Драма,Криминал
Детектив,Драма,Криминал,Триллер
Детектив,Драма,Триллер
Детектив,Комедия,Криминал,Триллер
Детектив,Криминал
Детектив,Фантастика
Документальный
Драма
Драма,Исторический,Триллер
......

Как вывести данные только по одному и уникальные?, например

Код:
Боевик
Детектив
Документальный
Драма
Комедия
Криминал
Триллер
Исторический
Фантастика
 
$stack = array_unique($stack); есть, но она не работает
 
В цикле foreach определить массив, ключем которого будет название любого значения из базы.
В виде значения можно для массива писать что угодно, например 1.
Таким образом у вас останутся только одни уникальные значения в этом массиве после цикла. Ключи просто будут затирать дубли.
Далее просто вторым циклом достаем ключи и выводим их как хотим.
 
$stack = array_unique($stack); есть, но она не работает
Этот код стоит не в том месте, чтобы уникализировать значения в рассыпную.
У вас в строке
foreach($rowdata as $value){

Идет цикл выше.

И еще непонятно в каком виде записи содержит $rowdata
 
Помогло
PHP:
 $stack = implode(',',$stack);
   
$stack = array_unique(explode(",",$stack));
 
Назад
Сверху