PHP json_encode不适用于一维数组


PHP json_encode not working with 1-dimentional array

我使用jquery自动完成插件从建议/自动完成中查找数组。

参考: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()阵列无法识别?

如果数组的条目中包含一个字符串,则插件不会"接受"数组(可能是一个错误):

['tag1','a','tag2','tag3'] // won't work
['tag1','tag2','tag3'] // works

因此,PHP 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" }
  ]
}