Как получить уникальную строку через запятую из неуникальной строки в php - PullRequest
0 голосов
/ 25 февраля 2011

у меня есть строка php

$select_columms = 'pid, p.title, caption, filepath, filename, encaption, user1, user2, user3, user4, user5, user6, ult_puja, p.title, user2, user3';

поэтому у меня возникла идея, что я могу получить уникальную строку с этой строкой кода

$select_columns = implode(',', array_unique(array_filter(explode(',',$select_columns))));

но, похоже, это не сработает. Ты видишь, чего мне не хватает?

редактирование: спасибо за помощь, мой окончательный код:

$select_columns = implode(',', array_filter(array_unique(explode(',', $select_columns))));

который выводит $select_columns = 'pid, p.title, caption, filepath, filename, encaption, user1, user2, user3, user4, user5, user6, ult_puja'

Я использую array_filter в случае, если у меня есть ввод, как ', pid,'

Ответы [ 5 ]

3 голосов
/ 25 февраля 2011

Попробуйте это

echo implode(',', array_unique(explode(',', $select_columms)));

РЕДАКТИРОВАТЬ Как указал @amitchd.Сильно терпит неудачу, когда не урезан.Исправлено сейчас

И если ваша строка имеет неравномерный интервал, вы можете сделать это

$select_columms = 'pid, p.title, caption, filepath, filename, encaption, user1, user2, user3, user4, user5, user6, ult_puja, p.title, user2, user3';
$arr    = explode(',', $select_columms);
array_walk($arr, '_trim');
echo implode(',', array_unique($arr));

function _trim(&$value) {
    $value = trim($value);   
}
1 голос
/ 25 февраля 2011

мне кажется нормальным. 2 номера:

1) вы неправильно написали "columns" в объявлении переменной

2) array_filter() здесь избыточно - без него работает точно так же.

демо

$ php -a
Interactive shell

php > $select_columns = 'pid, p.title, caption, filepath, filename, encaption, user1, user2, user3, user4, user5, user6, ult_puja, p.title, user2, user3';

php > echo  implode(',', array_unique(explode(',',$select_columns)));
pid, p.title, caption, filepath, filename, encaption, user1, user2, user3, user4, user5, user6, ult_puja

php > 
0 голосов
/ 09 октября 2013
$str = implode(',',array_unique(explode(',', $str)));
0 голосов
/ 25 февраля 2011

Столбцы были написаны неправильно, array_filter был ненужным, а при взрыве / взлете не было пробела после запятой.

<?php
$select_columns = 'pid, p.title, caption, filepath, filename, encaption, user1, user2, user3, user4, user5, user6, ult_puja, p.title, user2, user3';

$select_columns = implode(', ',array_unique(explode(', ',$select_columns)));

var_dump($select_columns);
?>

http://ideone.com/clone/b6dZd

0 голосов
/ 25 февраля 2011

Ответ JohnP должен работать. В качестве личного предпочтения я бы выделил это как минимум на две строки. Три функции в одной строке могут быть трудно читать ...

...