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 字符串?的主要内容,如果未能解决你的问题,请参考以下文章