PHP,jQuery传递JSON数组转向对象,如何将它保持为数组

时间:2015-11-03 16:34:26

标签: php jquery arrays json object

我有一个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'个元素。

这是我的问题发挥作用的地方......

有时它“有效”......有时它不会......

'key'似乎是数组中的内容:

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个项目...以上显示:

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

对我来说是正确的。我从PHP传递的数组中有3个项目.jQuery在列表中运行并为每个'行'添加一个类。

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

CONFLICT ITEMS: [object Object]
CONFLICT COUNT: undefined

那怎么样?我的阵列变成了一个对象吗?还有更多为什么?

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

2 个答案:

答案 0 :(得分:3)

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

正如@Kenney在评论中所说,一个可能的解决方案是继续使用数组,但是使用带有你的数组的array_values()函数,并且基本上重新生成数组,删除现有的密钥并使用顺序的密钥。 / p>

答案 1 :(得分:0)

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