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

4

正如标题所述,我正在尝试使用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格式无关。首先,创建一个包含所需数据的PHP数组;然后,将其使用json_encode转换成JSON格式。 - IMSoP
你能分享原始的 PHP 数组吗? - Joseph
1
你希望将其转换成什么?[ "测试1", "测试2", "测试3", "测试4", "测试5", "测试6" ] - Mark Reed
@MarkReed 没错,抱歉如果我表达不清楚,我真的找不到合适的词语来描述它。 - Ariana
2个回答

5

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

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

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


太好了,每天都学到新东西,非常感谢 :) 另外回答你的问题,我只是使用PDO从数据库中提取所有信息 $ginfo = $stmt->fetchAll(); 并且由于我要求从users表中选择用户名。 - Ariana

0

首先,您需要创建一个包含所需内容的PHP数组。然后,JSON编码过程将自动产生正确的结果。您应该接受Barmar的答案:

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

这三种形式只是表示相同的东西 - 一个包含六个字符串的数组的不同语法约定。

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只是语法,可以很容易地进行转换。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接