PHP json_encode 不适用于一维数组
PHP json_encode not working with 1-dimentional array
我正在使用 jquery-autocomplete 插件从 suggestions/autocomplete.
中查找数组
参考:https://github.com/devbridge/jQuery-Autocomplete
PHP (1)
$stmt = $dbh->query("SELECT tag_name FROM tags");
$tags = array();
$tags = $stmt->fetchAll(PDO::FETCH_COLUMN, 0);
echo json_encode($tags);
/*
var_dump($tags);
"array(6) {
[0]=>
string(1) "tag1"
[1]=>
string(2) "tag2"
[2]=>
string(3) "tag3"
[3]=>
string(4) "tag4"
}
"
*/
PHP (2)
echo ('["tag1","tag2","tag3","tag4"]');
PHP (3)
$a = ["tag1","tag2","tag3","tag4"];
echo json_encode($a);
JavaScript
$.ajaxSetup({ cache: false, async: false });
var myTags = [];
$.get( '/action.php', {action: 'get_tags'}).done( function(data){
console.log(data);
myTags = eval(data);
//myTags = JSON.parse(data);
});
$('#tagInput').autocomplete({
lookup: myTags
});
PHP v1 和 PHP v2 都将提供适当的数组 console.log(data)
。
但是,来自 PHP v1 json_encode($tags)
的数组将无法与插件一起使用(它根本无法识别该数组)。虽然 PHP v2 数组 echo ('["tag1","tag2","tag3","tag4"]');
工作得很好。 PHP v3 也不行。
这段代码有什么问题?为什么无法识别 json_encode()
数组?
您的 v2 有效是因为您使用了一系列字符串作为建议,如下所示:
{
"query": "Unit",
"suggestions": ["United Arab Emirates", "United Kingdom", "United States"]
}
当您要提供数据时,直接 json_encode 字符串数组将不起作用。你需要一个特殊的结构:
{
// Query is not required as of version 1.2.5
"query": "Unit",
"suggestions": [
{ "value": "United Arab Emirates", "data": "AE" },
{ "value": "United Kingdom", "data": "UK" },
{ "value": "United States", "data": "US" }
]
}
如果数组的条目中包含单个字符的字符串,插件将不会'accept'(可能是错误)数组:
['tag1','a','tag2','tag3'] // won't work
['tag1','tag2','tag3'] // works
所以,PHP json_encode 都可以。
我正在使用 jquery-autocomplete 插件从 suggestions/autocomplete.
中查找数组参考:https://github.com/devbridge/jQuery-Autocomplete
PHP (1)
$stmt = $dbh->query("SELECT tag_name FROM tags");
$tags = array();
$tags = $stmt->fetchAll(PDO::FETCH_COLUMN, 0);
echo json_encode($tags);
/*
var_dump($tags);
"array(6) {
[0]=>
string(1) "tag1"
[1]=>
string(2) "tag2"
[2]=>
string(3) "tag3"
[3]=>
string(4) "tag4"
}
"
*/
PHP (2)
echo ('["tag1","tag2","tag3","tag4"]');
PHP (3)
$a = ["tag1","tag2","tag3","tag4"];
echo json_encode($a);
JavaScript
$.ajaxSetup({ cache: false, async: false });
var myTags = [];
$.get( '/action.php', {action: 'get_tags'}).done( function(data){
console.log(data);
myTags = eval(data);
//myTags = JSON.parse(data);
});
$('#tagInput').autocomplete({
lookup: myTags
});
PHP v1 和 PHP v2 都将提供适当的数组 console.log(data)
。
但是,来自 PHP v1 json_encode($tags)
的数组将无法与插件一起使用(它根本无法识别该数组)。虽然 PHP v2 数组 echo ('["tag1","tag2","tag3","tag4"]');
工作得很好。 PHP v3 也不行。
这段代码有什么问题?为什么无法识别 json_encode()
数组?
您的 v2 有效是因为您使用了一系列字符串作为建议,如下所示:
{
"query": "Unit",
"suggestions": ["United Arab Emirates", "United Kingdom", "United States"]
}
当您要提供数据时,直接 json_encode 字符串数组将不起作用。你需要一个特殊的结构:
{
// Query is not required as of version 1.2.5
"query": "Unit",
"suggestions": [
{ "value": "United Arab Emirates", "data": "AE" },
{ "value": "United Kingdom", "data": "UK" },
{ "value": "United States", "data": "US" }
]
}
如果数组的条目中包含单个字符的字符串,插件将不会'accept'(可能是错误)数组:
['tag1','a','tag2','tag3'] // won't work
['tag1','tag2','tag3'] // works
所以,PHP json_encode 都可以。