这个问题已经被拖延了不止一次,但是,这就是我遇到的......
选项编号 1
PHP:
<?php
$fields = [];
$fields[0] = 0;
$fields[2] = 2;
$fields[1] = 1;
$fields = (array) $fields;
die(json_encode($fields));
js控制台:
{0: 0, 1: 1, 2: 2}
0: 0
1: 1
2: 2
__proto__: Object
选项编号 2
PHP:
<?php
$fields = [];
$fields[0] = 0;
$fields[2] = 2;
$fields[1] = 1;
/// Дальше любые манипуляции с массивом
$fields = array_merge([],$fields);
///$fields = array_reverse($fields);$fields = array_reverse($fields);
///$fs = []; foreach( $fields AS $k=>$f ) $fs[$k] = $f; $fields = $fs;
///$fields = get_object_vars((object)$fields);
die(json_encode($fields));
js控制台:
[0, 2, 1]
0: 0
1: 2
2: 1
length: 3
__proto__: Array(0)
选项 1:this.fields.forEach 发誓
选项 2:违反命令
我只看到这个输出:
<?php
$fields = [];
$fields[0] = 0;
$fields[1] = NULL;
$fields[2] = 2;
$fields[1] = 1;
die(json_encode($fields));
我形成了数组的一部分,然后将其添加到其中。我
假设规定索引将创建顺序
为什么会这样?
还有哪些其他选项可以在不丢失序列的情况下制作数组?
这是因为当您在 PHP 中使用函数序列化数组时
json_encode
,您可以获取数组或对象,具体取决于数组是否为简单列表。重要的是要了解列表中的值是排序的,当访问列表的第二个元素时,您将获得第二个元素,而不是索引为 2 的元素。强大的 php 数组需要在这里进行精细处理。如果需要列表,那么在序列化之前将数组转换为列表(例如,使用函数array_values
),但要注意元素在列表中的位置和它的键不一样。要了解发生了什么,请运行(例如在控制台中
php -a
)以下代码:顺便说一句,在 js 中,您可以使用for in来迭代对象。
我建议从 php 传递一个对象而不是数组。php:
在@EgorBanin 之后,我将建议
for in
迭代对象的属性。但这是针对 es6 的。在 es5 中,您将不得不“与手鼓共舞”一点。
js: