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

Posted

技术标签:

【中文标题】PHP/jQuery - 如何将多维 PHP 数组转换为 JSON 字符串?【英文标题】:PHP/jQuery - How To Convert A Multidimensional PHP Array To JSON String? 【发布时间】:2013-10-20 04:06:11 【问题描述】:

正如标题所述,我正在尝试使用 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它。 可以分享原始的PHP数组吗? 你想把它变成什么? [ "Test1", "Test2", "Test3", "Test4", "Test5", "Test6" ] ? @MarkReed 没错,如果我不清楚,对不起,我真的找不到形容词。 【参考方案1】:

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

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

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

【讨论】:

完美..每天都在学习新东西,谢谢 :) 为了回答您还问的问题,我只是使用 PDO $ginfo = $stmt->fetchAll 从数据库中提取所有内容();并且因为我要求从用户中选择用户名【参考方案2】:

所以,首先您需要创建一个包含您想要的内容的 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 只是语法,很容易相互转换。

【讨论】:

以上是关于PHP/jQuery - 如何将多维 PHP 数组转换为 JSON 字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何将多维PHP数组转换为html表

如何将两个单维数组转换为一个多维数组 - PHP

如何在PHP中通过分隔符将字符串分解为多维数组

PHP多维数组转一维数组

如何在 Laravel/PHP 中创建多维数组

PHP如何将SQL查询结果转为多维数组,并按查询行输出