2014-03-12 45 views
0

對不起,長標題。它花了我一個小時,但我終於得到了這個工作。我的問題是,如果有更快,更有效的方式來做我在這裏做的事情。從MySQL查詢到PHP陣列的jQuery自動完成/ Typeahead

基本上,我有一個HTML文本輸入字段,它使用jQuery來填充自動完成下拉答案(在這種情況下,藝術家爲我已收藏的歌曲列表)。我之前的工作一直很順利,直到我發現它顯示了一些我曾收藏過多首歌曲的藝術家的複製品。所以我需要使用array_unique()來擺脫重複。

不幸的是,我的列表不是MySQL結果的數組形式,而是一個字符串。在擺弄了一段時間之後,我將它顯示在一個數組中,但是現在這弄亂了我對jQuery列表的格式。 array_walk()幫助我格式化數組中的每個項目,然後將其轉換爲一個字符串。它看起來像很多工作。我可以用更少的步驟做到嗎?

這裏是我的代碼:

<input type="text" class="span3" style="margin: 0 auto; " autocomplete="off" name="artist" data-provide="typeahead" data-items="4" data-source='[<? 

$artistlist = "SELECT * FROM songs where id >= 0"; 
$result = $mysqli->query($artistlist); 

while($row = mysqli_fetch_assoc($result)) { 

$artists[] = "\"".$row['artist']."\","; 
//have to format this way for the jQuery results. 

$artists = array_unique($artists); 
} 

function formatArtists(&$artists) { 
$artists = str_replace("'", "&#39;", $artists); 
//have to do this because of "O'" names. 

} 
array_walk($artists, "formatArtists"); 
foreach($artists as $artist) { 
$artistSelect .= $artist; 
} 

$artistSelect = substr(trim($artistSelect), 0, -1); 
//I have to convert the array to a string so that I can trim the final comma from the list of artists. Otherwise the autocomplete breaks. 

echo $artistSelect; 
?>]'> 

感謝您的幫助,如果你發現任何其他低效,我還在學習,所以我不會介意指正!

+1

在第一次嘗試使用SELECT DISTINCT藝術家詩經其中id> = 0 - 此查詢將爲您提供藝術家名單沒有重複。 –

回答

2

就在幾個建議:

而不用通過$藝術家循環,你應該叫formatArtists當你獲取查詢結果

您可以使用一個簡單的技巧,以避免藝人用藝術家的名字作爲數組的鍵重複

有一個名爲implode()的php函數,它可以避免你一些行。

運用他們都:

<input type="text" class="span3" style="margin: 0 auto; " autocomplete="off" name="artist" data-provide="typeahead" data-items="4" data-source='[<? 

$artistlist = "SELECT * FROM songs where id >= 0"; 
$result = $mysqli->query($artistlist); 
$artists = array(); 
while($row = mysqli_fetch_assoc($result)) { 
    $artist_name = '"'.formatArtists($row['artist']).'"'; 
    $artists[$artist_name] = $artist_name; 
} 
echo implode(',',$artists);//Will join every element from array using , character 
?>]'> 
+0

所以如果我這樣做,我甚至需要formatArtists功能嗎?我可以直接將它應用於$ artist_name? – dcclassics

+1

你說的沒錯,如果你更換 '$這位演出= ' 「' .formatArtists($行[ '藝術家'])。 '」';' 與 '$這位演出= '「' .str_replace(」 '',''',$ row ['artist'])。''';' – Olvathar