這篇文章主要介紹了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": "1@2@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);
以上就是本文的全部內容,希望對大家的學習有所協助。