本文探討如何高效處理字符串,去除長度小于等于2和大于等于4的部分,并以逗號分隔的形式輸出結果。 給定原始字符串:”1,22,333,啊,啊啊,啊啊啊,4444″,期望結果為”22,啊啊啊”。
問題分析:
我們需要根據字符串長度進行篩選,保留長度為3的子字符串。 原始代碼中存在一個問題:它試圖去除長度小于等于2 和 大于等于3的部分,這導致任何字符串都會被去除。 正確的邏輯應該是只保留長度為3的子字符串。
改進后的php代碼:
<?php $str = "1,22,333,啊,啊啊,啊啊啊,4444"; $arr = explode(",", $str); $result = array_filter($arr, function ($s) { return mb_strlen($s, 'UTF-8') == 3; // 只保留長度為3的字符串 }); echo implode(",", $result); // 輸出結果 ?>
代碼解釋:
- explode(“,”, $str): 將原始字符串以逗號分隔成數組。
- array_filter($arr, function ($s) { … }): 使用匿名函數作為回調函數,對數組進行過濾。 mb_strlen($s, ‘UTF-8’) == 3 確保只保留長度為3的UTF-8編碼的字符串。
- implode(“,”, $result): 將過濾后的數組元素用逗號連接成字符串。
效率:
此方法直接利用PHP內置的mb_strlen函數和array_filter函數,效率高且代碼簡潔。 避免了自定義函數的開銷,并且array_filter函數針對數組過濾進行了優化。 相比于循環遍歷,此方法更符合PHP的編程風格,也更易于閱讀和維護。 最終輸出結果為 “333,啊啊啊” (注意,與原文期望結果略有不同,因為原文邏輯存在錯誤)。
改進后的代碼解決了原始代碼中的邏輯錯誤,并提供了更高效、更簡潔的解決方案。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END