在不为每个元素设置键的情况下从非关联数组中取消元素


Unseting element from non associative array without setting a key for each element

我有一个小问题。

我有一个嵌套数组,我想从中间删除一个对象。我试着取消设置,但这给每个元素一个键,我不想(因为我想让一个容易导航json数组从它)

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

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

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

我想从联系人数组中删除一个条目。我当前的功能如下:

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"  
             ]  
            }  
   }  
}  

有没有办法做到这一点,而不取消设置整个联系人数组和重置它与所有,但一个对象?

这是JSON中的一个要求,由底层JavaScript语言设置。JS不支持"稀疏"数组,并且总是假设[...]数组定义字符串将具有连续的数组键。例如

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

你不能有(例如)

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

一旦你从数组的"中间"取消了一个值,你的键就不是连续的,JSON被迫使用一个对象来保存数据。