RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 939625
Accepted
borodatych
borodatych
Asked:2020-02-01 23:26:17 +0000 UTC2020-02-01 23:26:17 +0000 UTC 2020-02-01 23:26:17 +0000 UTC

php对象到数组

  • 772

这个问题已经被拖延了不止一次,但是,这就是我遇到的......


选项编号 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));

我形成了数组的一部分,然后将其添加到其中。我
假设规定索引将创建顺序

为什么会这样?
还有哪些其他选项可以在不丢失序列的情况下制作数组?

javascript
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Егор Банин
    2020-02-01T23:42:58Z2020-02-01T23:42:58Z

    这是因为当您在 PHP 中使用函数序列化数组时json_encode,您可以获取数组或对象,具体取决于数组是否为简单列表。重要的是要了解列表中的值是排序的,当访问列表的第二个元素时,您将获得第二个元素,而不是索引为 2 的元素。强大的 php 数组需要在这里进行精细处理。如果需要列表,那么在序列化之前将数组转换为列表(例如,使用函数array_values),但要注意元素在列表中的位置和它的键不一样。

    要了解发生了什么,请运行(例如在控制台中php -a)以下代码:

    $arr = [];
    $arr[2] = 'два';
    $arr[1] = 'один';
    $arr[0] = 'ноль';
    
    $i = 0;
    foreach ($arr as $k => $v) {
        echo "итерация $i - ключ $k\n";
        ++$i;
    }
    

    顺便说一句,在 js 中,您可以使用for in来迭代对象。

    • 1
  2. Best Answer
    eustatos
    2020-02-02T02:14:31Z2020-02-02T02:14:31Z

    我建议从 php 传递一个对象而不是数组。php:

    $arr = [
      '0' => 0,
      '2' => 2,
      '1' => 1,
    ];
    
    echo json_encode($arr); // {"0":0,"2":2,"1":1}
    

    在@EgorBanin 之后,我将建议for in迭代对象的属性。但这是针对 es6 的。
    在 es5 中,您将不得不“与手鼓共舞”一点。

    js:

    var arr = JSON.parse('{"0":0,"2":2,"1":1}');
    // es6
    for (var item in arr) {
      console.log(item);
    }
    
    // es5
    for (var idx = 0; idx < Object.keys(arr).length; idx++) {
      console.log(arr[idx]);
    }
    
    // 0
    // 1 
    // 2
    
    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    根据浏览器窗口的大小调整背景图案的大小

    • 2 个回答
  • Marko Smith

    理解for循环的执行逻辑

    • 1 个回答
  • Marko Smith

    复制动态数组时出错(C++)

    • 1 个回答
  • Marko Smith

    Or and If,elif,else 构造[重复]

    • 1 个回答
  • Marko Smith

    如何构建支持 x64 的 APK

    • 1 个回答
  • Marko Smith

    如何使按钮的输入宽度?

    • 2 个回答
  • Marko Smith

    如何显示对象变量的名称?

    • 3 个回答
  • Marko Smith

    如何循环一个函数?

    • 1 个回答
  • Marko Smith

    LOWORD 宏有什么作用?

    • 2 个回答
  • Marko Smith

    从字符串的开头删除直到并包括一个字符

    • 2 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5