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 都可以。