我正在尝试使用php生成一组“{URL.callback}”以在javascript中使用。通过使用数据库。这是我的代码:
$sql="select * from search where keywords LIKE '$bb%' ORDER BY keywords ";
$result=mysql_db_query($dbname,$sql);
echo $_GET["callback"] . "({ t:\"$t\", r:[";
while ( $rs=mysql_fetch_array($result)) {
$keywords=$rs[keywords];
echo "" ."\"$keywords\"".","." ";
}
echo"] })";
这是它返回的代码:
({ t:"", r:["example1", "example2", "example3",] })
一切似乎都是正确的,除了(,)最后(在“example3”之后)我想要摆脱。因为它不正确,不能与之一起使用。
问题是:如何正确生成它?如何摆脱最后(,)?
答案 0 :(得分:3)
不要自己生成JSON,而是使用json_encode
为您完成繁重的工作。
$keywords = array ();
while ( $rs=mysql_fetch_array($result)) {
$keywords[] = $rs['keywords'];
}
echo json_encode ($keywords);
首选解决方案
虽然您打算使用json_encode
将$ keywords附加到您的其他数据集,并在整个结构中使用json_encode
。
$json_data = array (
't' => '',
'r' => array ()
);
while ( $rs=mysql_fetch_array($result)) {
$json_data['r'][] = $rs['keywords'];
}
echo "(".json_encode ($json_data).")";
如果你想自己做一些(相当干净的)选项,请参阅下面的片段。
将所有检索到的关键字附加到数组中,并使用带有“,”的join
作为分隔符,以便在while循环后形成一个字符串
$ keyword_array = array();
while ($rs=mysql_fetch_array($result)) {
$keywords=$rs[keywords];
$keyword_array = "\"$keywords\"";
}
echo join (', ', $keywords);
在while循环前使用mysql_num_rows
获取$result
中的行数,并在处理最后一个元素时不附加,
。
$n_rows = mysql_num_rows ($result);
for ($i =1; $rs = mysql_fetch_array ($result); ++$i) {
$keywords=$rs[keywords];
echo "\"$keywords\"";
if ($i != $n_rows)
echo ", ";
}
答案 1 :(得分:1)
试试这个:
$output = '';
while ( $rs=mysql_fetch_array($result)) {
$keywords=$rs[keywords];
$output .= "" ."\"$keywords\"".","." ";
}
$output = substr($output, 0, -2);
echo $output;
答案 2 :(得分:0)
希望这适合你
$sql="select * from search where keywords LIKE '$bb%' ORDER BY keywords ";
$result=mysql_db_query($dbname,$sql);
echo $_GET["callback"] . "({ t:\"$t\", r:[";
$keywords_print = array();
while ( $rs=mysql_fetch_array($result)) {
$keywords=$rs[keywords];
$keywords_print[] = "\"$keywords\"";
}
echo implode(",",$keywords_print);
echo"] })";
答案 3 :(得分:0)
在PHP中创建数据结构(多维数组),让json_encode()
生成JS数据结构。
看起来像这样:
$sql="select * from search where keywords LIKE '$bb%' ORDER BY keywords ";
$result=mysql_db_query($dbname,$sql);
$data = array(
't' => $t,
'r' => array(),
);
while ( $rs=mysql_fetch_array($result)) {
$data['r'][] = $rs['keywords'];
};
然后显示它:
echo $_GET["callback"].'('.json_encode($data).');';
答案 4 :(得分:0)
我认为最干净的方法是创建一个元素数组,然后使用,
作为分隔符进行内爆。
// added initial `"`
echo $_GET["callback"] . "({ t:\"$t\", r:[\"";
while ( $rs=mysql_fetch_array($result)) {
$keywords=$rs[keywords];
$arr[] = $keywords;
}
echo implode('", "', $arr);
// added closing `"`
echo "\"] })";