从非关联数组中取消元素而不为每个元素设置关键字

时间:2014-07-17 19:00:29

标签: php arrays json

我有一点问题。

我有一个嵌套数组,我想从中间删除一个对象。我尝试取消设置但是这给了每个元素一个我不想要的键(因为我想从中轻松导航json数组)

为了更好地理解一个例子:

这是我的数组的一部分(联系人不是唯一的元素,但这样更容易看到):

{
   "contacts": [
       {
       "name": "1234",
       "displayname": "1234",
       "groups": [
           "1234",
           "1234456"
       ]
       }
   ]
}

我想从contacts数组中删除一个条目。 我目前的职能如下:

foreach($responseArray['contacts'] as $key => $contact){
        if($contact['name'] == $_POST['username']){
            unset($responseArray['contacts'][$key]);
        }
}

哪种方式有效,但将联系人数组变成了我不想要的json对象(它为每个条目提供了一个键'1':第一次接触,'2':第二次接触.....)

像这样:

{
   "contacts": {    
       "1": {   
             "name": "1234",  
             "displayname": "1234",  
             "groups": [  
                       "1234",  
                       "1234456"  
             ]  
            }  
   }  
}  

在没有取消设置整个联系人数组并使用除一个对象之外的所有联系人重置它的情况下,无论如何都可以这样做吗?

1 个答案:

答案 0 :(得分:0)

JSON中的一项要求是由底层JavaScript语言设置的。 JS不支持"稀疏"数组,并始终假定[...]数组定义字符串将具有连续的数组键。 e.g。

var foo = ['a', 'b', 'c'];
      keys: 0    1    2

你不能(例如)

var foo = [0 => 'a', 10 => 'b', 20 => 'c'];
     keys: 0         10         20

一旦你取消了"中间"的价值。对于你的数组,你的密钥是非连续的,并且JSON被迫使用一个对象来保存数据。