【问题标题】:PHP to javascript - I want to convert a php multidimensional array to a javascript arrayPHP to javascript - 我想将 php 多维数组转换为 javascript 数组
【发布时间】:2018-05-09 13:51:02
【问题描述】:

我有以下数组:

$arr = json_encode($employeeDetails);

应该翻译成:

var arr = '{"0":{"name":"William","bio":"Morbi sed ligula"},"2":{"name":"Grace","bio":"Praesent venenatis"}}';

必须返回数组并得到这个结果:

var arr = [[ 'William', 'Morbi sed ligula'],[ 'Grace', 'Praesent venenatis'] ];

【问题讨论】:

  • 请告诉我们$employeeDetails 包含的内容。
  • 如果你想要一个不同格式的数组,你需要先建立一个正确格式的数组。您可能需要遍历它并递归删除所有键。
  • @fab - OP 没有询问是否进行直接转换(他们已经在使用 json_encode(),这是您的骗子建议的)。他们想改变响应的格式。
  • 第一个json字符串是生成的吗?第二个是你真正想要的?

标签: javascript php arrays


【解决方案1】:

这是一种假设$employeeDetails是的方法

$employeeDetails[0][] = ['William'];
$employeeDetails[0][] = ['Morbi sed ligula'];
$employeeDetails[1][] = ['Grace' ];
$employeeDetails[1][] = ['Praesent venenatis'];

然后翻译这个:

var arr = '[[["William"],["Morbi sed ligula"]],[["Grace"],["Praesent venenatis"]]]';

进入这个:

{"0":{"name":"William","bio":"Morbi sed ligula"},"2":{"name":"Grace","bio":"Praesent venenatis"}}

会是这样的:

var arr = '[[["William"],["Morbi sed ligula"]],[["Grace"],["Praesent venenatis"]]]';

obj = JSON.parse(arr);

var newObj = {};

for (var key in obj )
{
    newObj[key] = {};

    newObj[key]["name"] = obj[key][0][0];
    newObj[key]["bio"] = obj[key][1][0];

}

console.log(newObj);

;

翻译:

var obj = '{"0":{"name":"William","bio":"Morbi sed ligula"},"2":{"name":"Grace","bio":"Praesent venenatis"}}';

进入这个:

var arr = '[[["William"],["Morbi sed ligula"]],[["Grace"],["Praesent venenatis"]]]';

类似:

var obj = '{"0":{"name":"William","bio":"Morbi sed ligula"},"2":{"name":"Grace","bio":"Praesent venenatis"}}';


obj = JSON.parse(obj);

var newArray = [];

for (var key in obj )
{
    newArray[key] = obj[key];
}

【讨论】:

  • 非常感谢您的出色回答!这很有启发性。
【解决方案2】:

为了在生成的 JSON 中呈现为数组而不是对象,PHP 数组必须具有从零开始的连续数字键。

为了实现这一点,您可以在 json_encode 和输出之前使用 array_values 重新索引数据。

$employeeDetails = array_values(array_map('array_values', $employeeDetails));

array_map 中的 array_values 回调会将内部数组的字符串键转换为数字,而外部 array_values 会将顺序数字键重新分配给外部数组。


根据$employeeDetails 的创建方式,可能会在您的代码早期进行一些更改,从而无需进行此预处理。

例如,像您开始使用的数组可以通过从数据库中获取一组关联数组并随后在 PHP 中过滤结果来创建。在这种情况下,您可以排除查询中不需要的行并获取数字索引数组,因此您的数组已经采用json_encode 作为数组的形式。

【讨论】:

  • 我同意你的观点,我也在研究对原始数组的格式进行小改动的可能性。非常感谢您的回复!
猜你喜欢
  • 1970-01-01
  • 2020-05-22
  • 1970-01-01
  • 2014-03-30
  • 1970-01-01
  • 1970-01-01
  • 2018-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多