天天看點

php 遞歸修改數組,PHP-遞歸删除多元數組的某個值

今天在做業務邏輯的過程中,需要在一個不确定的多元數組中删除某個特定的key,查了挺長時間加上自己的修改,終于滿足了業務邏輯,該方法在修改後應該可以适用于很多地方,是以記錄下來以備後用,我這裡是一個多元數組,還是json_encode後的,主要目的是删除所有old_tags_id數組中有tag_id=264的資料,順便要删除相應的tag_name,還有 addtag要減1,,代碼如下:

先放遞歸函數,當然這裡是核心,很多人看了這個應該就已經知道如何使用了.

public function dealMenuTagDelete(&$menuData, $tag_id)

{

if (!is_array($menuData)) {

return false;

}

foreach ($menuData as $key => $val) {

if ($key === 'old_tags_id') {

foreach ($val as $tagKey => $tagVaule) {

if ($tagVaule == $tag_id) {

unset($menuData['old_tags_id'][$tagKey]);

unset($menuData['old_tags'][$tagKey]);

$menuData['addtag']--;

}

}

}

if (is_array($val)) {

self::dealMenuTagDelete($menuData[$key], $tag_id);

}

}

return $menuData;

}

維數組長這樣,還是jeson_encode後的格式:

[

{

"typ": "res_ejcd",

"tit": "message1",

"data": "[email protected]@3",

"subdata": {

"zizicd1": {

"typ": "res_wb",

"data": "qqqq",

"addtag": 1,

"old_tags": [

"\"campaign綜合分析\"",

"test add a tag"

],

"old_tags_id": [

"264",

"17"

],

"new_tags_id": [],

"tit": "1"

},

"zizicd2": {

"typ": "res_wb",

"data": "wwww",

"addtag": 1,

"old_tags": [

"test add a tag"

],

"old_tags_id": [

"17"

],

"new_tags_id": [],

"tit": "2"

},

"zizicd3": {

"typ": "res_wb",

"data": "ddd",

"addtag": 1,

"old_tags": [],

"old_tags_id": [],

"new_tags_id": [

"new_tag1"

],

"tit": "3"

}

},

"addtag": 0,

"old_tags": [],

"old_tags_id": [],

"new_tags_id": []

},

{

"typ": "res_tw",

"tit": "Post",

"data": "2121",

"subdata": null,

"addtag": 1,

"old_tags": [

"“519引号閱讀user message圖文”"

],

"old_tags_id": [

"183"

],

"new_tags_id": []

},

{

"typ": "res_wb",

"tit": "Today1",

"data": "12312321",

"subdata": null,

"addtag": 1,

"old_tags": [],

"old_tags_id": [],

"dynamicdata": "{\"default\":{\"message_type\":\"1\",\"val\":\"dynamic\"},\"segementation\":[{\"segId\":\"451\",\"message_type\":\"1\",\"val\":\"你屬于conversation 80這一組\"},{\"segId\":\"450\",\"message_type\":\"1\",\"val\":\"poll-1212\\n有三個人,rainbow H T_T\"}]}",

"configId": "2392",

"new_tags_id": [

"new_tag2"

]

}

]

然後指派,調用

$tag_id = 264;

$menuData = json_decode($data,true);//這裡第二個參數用true就會轉化為數組了

self::dealMenuTagDelete($menuData,$tag_id);

print_r($menuData);