2011-02-25 22 views
0

得到一個獨特的逗號分隔字符串我有一個PHP字符串如何從一個非唯一的字符串在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,'

+0

所以,你的意思是你想刪除出現在您的逗號分隔字符串重複值,並留下輸出爲逗號分隔字符串? – Neddy 2011-02-25 05:31:26

+0

正是@Neddy邏輯創建select語句是導致重複字段進行查詢 – 2011-02-25 05:40:53

+0

誰能告訴我,爲什麼各功能的順序所作的區別?作爲@amitchd的 – 2011-02-25 05:47:53

回答

1

似乎沒什麼問題。 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

列之前/之後有一個空格時,你的輸出是錯誤的,但有時輸入可能是pid,p.title,caption,filepath,file,所以我需要刪除空白也是 – 2011-02-25 05:39:05

+0

我不接受答案,當我發現它是array_filter的順序,使我的代碼 – 2011-02-25 06:12:31

+0

@Traveling_Monk有所不同時:足夠公平。以供將來參考,如果你比「看起來沒有工作」更明確,大部分的困惑都可以避免。:) – simon 2011-02-25 06:33:30

3

嘗試輸入這一點

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); 
} 
+0

,做工作,它讓我在正確的軌道上 – 2011-02-25 05:35:22

+0

也許要在一個運行array_unique功能:)前的爆炸,結果做了array_walk與裝飾功能。 – amitchd 2011-02-25 05:35:50

+0

@amitchd,我想到了,但後來我發現空間無論如何都會變得獨一無二,它不會影響輸出,同時向鏈中添加另一個功能 – JohnP 2011-02-25 05:37:26

0

JohnP的答案應該工作。作爲個人喜好,我至少將它分成兩行。在一行三種功能可難讀......

0

列被拼寫錯了,array_filter是unnecssary和爆炸/破滅失蹤逗號後的空間。

<?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

這些列實際上是拼寫正確的應用程序,我不相信在爆炸或爆炸使差異... – 2011-02-25 06:13:26

+0

@Traveling_Monk是的,這是真的。 – Neddy 2011-02-25 23:42:26

0
$str = implode(',',array_unique(explode(',', $str))); 
相關問題