通过PHP数组进行迭代会为每个项添加整数索引


Iterating through PHP Array adds integer index to each item

我有一个从其中一个模型中的搜索函数返回的结果数组。一切都很好,然而,我最近添加了一个迭代块来根据ID编辑一行数据

for($i=0;$i<count($searchResponse);$i++){
    if($searchResponse[$i]['id']==$user_id){
        unset($searchResponse[$i]);
    }
}   

该代码运行良好,并正确地删除了相应的数据。然而,它改变了阵列结构:

 "data":[
{
"id":"1",
"name_first":"Cameron",
"name_last":"Leafe",
"industry":"IT",
"workplace":"Leafe Interactive",
"imageURL":"https:'/'/scontent-b-kul.xx.fbcdn.net'/hphotos-xfa1'/t31.0-8'/p720x720'/819309_4979120151286_1476247244_o.jpg"
},
{
"id":"8",
"name_first":"Caroline",
"name_last":"McCullough",
"industry":"IT",
"workplace":"Occupation",
"imageURL":"http:'/'/www.mothersdelight.com'/avatar'/avatar.jpg"
},
{
"id":"11",
"name_first":"Akiko",
"name_last":"McDougall",
"industry":"IT",
"workplace":"Occupation",
"imageURL":"http:'/'/www.mothersdelight.com'/avatar'/avatar.jpg"
}
]

到此:

"data":{
"1":{
"id":"3",
"name_first":"Jane",
"name_last":"Doe",
"industry":"Retail - Fashion",
"workplace":"Big-W",
"imageURL":"http:'/'/www.johndoe.pro'/img'/John_Doe.jpg"
},
"5":{
"id":"8",
"name_first":"Caroline",
"name_last":"McCullough",
"industry":"IT",
"workplace":"Occupation",
"imageURL":"http:'/'/www.mothersdelight.com'/avatar'/avatar.jpg"
},
"6":{
"id":"11",
"name_first":"Akiko",
"name_last":"McDougall",
"industry":"IT",
"workplace":"Occupation",
"imageURL":"http:'/'/www.mothersdelight.com'/avatar'/avatar.jpg"
}
}

请注意第二个示例中为每个项目添加的索引。这个小的更改会导致客户端出现各种问题,PHP不是我的正常领域,我不确定为什么这个块会改变结构。通常我会在客户端处理这个问题,但是,产品已经部署好了。

任何关于如何防止迭代块导致此整数索引出现的见解或建议都将不胜感激!

您可以使用array_splice安全地操作非关联数组:

for($i=0;$i<count($searchResponse);$i++){
    if($searchResponse[$i]['id']==$user_id){
        array_splice($searchResponse, $i, 1);
    }
}

array_splice采用参数

array_splice( $array, $offset, $length*, $replacementArr* )

其中后两个参数是可选的。在这种情况下,我们希望从索引$i处的数组中删除一个元素,因此我们使用

array_splice( $searchResponse, $i, 1 );

拼接也可以用来分割数组或用另一个数组替换数组元素,所以这是一个很方便的功能。