【问题标题】:PHP, jQuery passing JSON array turns to object, how to keep it an arrayPHP,jQuery传递JSON数组转为对象,如何将其保持为数组
【发布时间】:2016-02-03 22:00:27
【问题描述】:

我有一个 PHP 数组,我想将它传递给 jQuery 并更新页面上的行。

这个 PHP 数组是页面上选中的复选框的“名称”。 (所以这个数组可以是任意长度,取决于用户选择的内容)

PHP 数组:

var_dump($sr->conflict_return);

OUTPUT CHECK: array(5) { [0]=> string(33) "hours_9_7_reg_session_102_905_925" [1]=> string(33) "hours_9_7_reg_session_101_905_925" [2]=> string(33) "hours_9_7_reg_session_103_905_925" [4]=> string(33) "hours_9_7_reg_session_104_845_915" [13]=> string(33) "hours_9_7_reg_session_103_845_905" } 

这种情况……我的 [php] 数组中有 '5' 个元素。

这就是我的问题所在......

有时它'有效'......有时它不......

“关键”似乎是数组中的内容:

OUTPUT CHECK: array(3) { [0]=> string(33) "hours_9_7_reg_session_102_845_905" [1]=> string(33) "hours_9_7_reg_session_101_845_905" [2]=> string(33) "hours_9_7_reg_session_104_845_915" } 

这似乎有效.. 数组中的 3 个项目.. 舞台上的所有 3 行都被突出显示。

这个:

OUTPUT CHECK: array(4) { [0]=> string(33) "hours_9_7_reg_session_102_845_905" [1]=> string(33) "hours_9_7_reg_session_101_845_905" [2]=> string(33) "hours_9_7_reg_session_103_845_905" [4]=> string(33) "hours_9_7_reg_session_104_845_915" } 

不起作用...并且没有突出显示任何行

(好像数组中有 4 个项目会中断??)

我的 jQuery 来解析数据:

var conflictItems = <?=json_encode($sr->conflict_return); ?>;   
//has a conflict list
    if(conflictItems.length > 0){   
        alert("Has conflicts");
        //loop through and highlight elements on stage
        for(i=0; i<conflictItems.length; i++){
            console.log(conflictItems[i]);
            $("#sr_table_"+conflictItems[i]+"_row").addClass("conflict_border");
        }
    }

当我跟踪 (console.log()) 数据时......我得到奇怪的结果。

console.log('CONFLICT ITEMS: ' + conflictItems);
console.log('CONFLICT COUNT: ' + conflictItems.length);

数组中的 3 个 x 项...如上所示:

CONFLICT ITEMS: hours_9_7_reg_session_103_845_905,hours_9_7_reg_session_102_845_905,hours_9_7_reg_session_104_845_915
CONFLICT COUNT: 3

这对我来说是正确的。我的数组中有 3 个项目是从 PHP 传递过来的。jQuery 遍历列表并向每个“行”添加一个类。

但是,当我添加第 4 项时......跟踪的输出是:

CONFLICT ITEMS: [object Object]
CONFLICT COUNT: undefined

那怎么办?我的数组会变成一个对象吗?.. 还有更多为什么??

我该如何解决这个问题?我不明白为什么数组中有 3 个项目有效.. 但不是 4 个?

【问题讨论】:

  • Javascript 没有非顺序数组,因此 PHP 将其编码为对象。
  • @JonStirling 很好 - 你应该把它作为答案发布!
  • 提示:array_values().

标签: php jquery arrays json object


【解决方案1】:

Javascript 没有非顺序数组键的概念(您的示例有键 0、1、2 和 4),因此在数组上运行 json_encode 时,它会将其转换为 JS 对象的 JSON 表示法.

正如@Kenney 在 cmets 中所说,一个可能的解决方案是继续使用数组,但利用 array_values() 函数获取您的数组,并基本上重新生成数组,丢弃现有的键并使用顺序键。

【讨论】:

    【解决方案2】:

    您的数组中缺少索引 3,因此 js 将其转换为对象。

    【讨论】:

    • 好的.. 感谢您的回复和解释,但是我该如何正确解析我的数组(对象).. 使用上面的内容?为了充分披露,...丢失的索引是我试图摆脱我的重复数组的结果:$uniquePresentations = array_unique($presentations); 如果我没有这样做...并且只是将重复项留在...我不会有这个问题我拿着? (仍然是干净的数据,我想保留非重复数组,并弄清楚如何处理我猜的对象)
    • 您可以像这样重置数组键:$arr =array_values($arr);
    • 谢谢大家!我不知道该归功于谁? @Jon Stirling 解释了为什么它不起作用。 (很高兴知道)但 Kenny 提到了 array_values(),恕我直言,它实际上是“修复”(答案)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 2014-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    相关资源
    最近更新 更多