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'];
4

2 回答 2

5

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

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

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

于 2013-10-11T23:59:37.797 回答
0

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

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

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

PHP 数组字面量:

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

PHPprint_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 只是语法,很容易相互转换。

于 2013-10-12T00:06:45.713 回答