从MySQL查询到PHP数组的jQuery自动完成/预先输入

时间:2014-03-12 16:23:00

标签: javascript php jquery mysql arrays

很抱歉这个长标题。它花了我一个小时,但我终于有了这个工作。我的问题是,如果有更快,更有效的方式去做我在这里做的事情。

基本上,我有一个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 个答案:

答案 0 :(得分:2)

只是一些建议:

在获取查询结果

时,您应该调用formatArtists,而不是遍历$ artist

您可以使用一个简单的技巧来避免艺术家重复使用艺术家的名称作为数组键

有一个名为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
?>]'>