PHP / jQuery – 如何将多维PHP数组转换为JSON字符串?

正如标题所述,我正在尝试使用Bootstrap的Typeahead.js,它需要一个像这样的JSON字符串

var subjects = ['PHP', 'MySQL', 'SQL', 'PostgreSQL', 'HTML', 'CSS', 'HTML5', 'CSS3', 'JSON']; 

但是我有一个多维数组,在执行json_encode时会返回以下内容

 [{"username":"Test1"},{"username":"Test2"},{"username":"Test3"},{"username":"Test4"},{"username":"Test5"},{"username":"Test6"}] 

当我尝试使用此数组时,Typeahead.js会抛出错误。

我如何将多维转换为示例?

原始PHP数组

 Array ( [0] => Array ( [username] => Test1 ) [1] => Array ( [username] => Test2 ) [2] => Array ( [username] => Test3 ) [3] => Array ( [username] => Test4 ) [4] => Array ( [username] => Test5 ) [5] => Array ( [username] => Test6 ) ) Desired outcome would be var subjects = ['Test1', 'Test2', 'Test3', 'Test4', 'Test5', 'Test6']; 

您的原始数组是二维的。 您需要获取每个子数组的元素,然后将其转换为JSON:

 echo json_encode(array_map(function($x) { return $x['username']; }, $original_array)); 

或者,您可以首先修复创建原始数组的任何代码。 为什么它在每个元素中放置一个关联数组,而不仅仅是用户名本身? 如果它们只有一个元素,总是使用相同的键,那么将它们作为关联数组就没有多大意义了。

所以,首先你需要创建一个包含你想要的PHP数组。 然后JSON编码过程将自动生成正确的结果。 你应该接受Barmar的回答:

 $flat_array = array_map(function($x) { return $x['username']; }, $array_of_arrays); 

这三种forms只是表示同一事物的不同语法约定 – 六个字符串的数组。

PHP数组文字:

 Array( 'Test1', 'Test2', 'Test3', 'Test4', 'Test5', 'Test6' ); 

PHP print_r输出:

 Array ( [0] => Test1 [1] => Test2 [2] => Test3 [3] => Test4 [4] => Test5 [5] => Test6 ) 

JSON:

 [ "Test1", "Test2", "Test3", "Test4", "Test5", "Test6" ] 

最后一个当然也是JavaScript的数组文字语法(因为JSON只是Javascript文字语法的标准化子集)。 它也适用于许多其他语言,包括Perl,Python,Ruby,Haskell,Clojure,Erlang ……

但关键是,结构是你关心的。 JSON只是语法,可以轻松转换为。