PHP两个字符串explode拆分后对比提取内容出现重复结果问题求助
现有代码问题
- 数组长度统计错误:
$nr1 = count($var2);本应统计$var1的长度,错误使用了$var2,导致外层循环遍历范围异常。 - 元素拆分不完整:仅按逗号拆分字符串,没有处理元素前后的多余空格,且
$var_2中首个元素是空格分隔的blue red,没有被拆分为两个独立颜色,导致元素识别错误。 - 循环逻辑错误:双层循环中每完成一次元素对比就输出一次内容,自然会产生大量重复结果;同时判断逻辑矛盾,先通过
strcmp判断两个值不相等,又判断两个值是否相等,完全冲突。 - 输出逻辑不符合需求:没有对结果做合并/去重处理,直接在循环中输出,无法得到预期的格式化结果。
修复方案
你需要先统一处理字符串拆分逻辑,再根据需求取数组的交集或者并集,不需要手动写双层循环对比,PHP内置的数组函数可以直接实现需求:
// 原始字符串 $var_1 = "blue, yellow, red, purple, black"; $var_2 = "blue red, green, black"; // 通用拆分函数:将逗号、空格都作为分隔符,提取所有独立颜色 function splitColorStr($str) { // 先把所有逗号替换为空格,再按空格拆分 $str = str_replace(',', ' ', $str); $colorArr = explode(' ', $str); // 去除每个元素的首尾空格,过滤空元素 $colorArr = array_filter(array_map('trim', $colorArr)); return $colorArr; } $arr1 = splitColorStr($var_1); $arr2 = splitColorStr($var_2); // 场景1:需要获取两个字符串所有出现过的颜色(去重) $result = array_unique(array_merge($arr1, $arr2)); // 输出:blue, yellow, red, purple, black, green // 场景2:需要获取两个字符串的重复元素(交集) // $result = array_intersect($arr1, $arr2); // 输出:blue, red, black // 场景3:不需要去重,保留所有拆分后的元素 // $result = array_merge($arr1, $arr2); // 输出:blue, yellow, red, purple, black, blue, red, green, black // 按预期格式输出 echo implode(', ', $result);
如果你的实际需求和上述场景不符,调整合并和去重的逻辑即可。
内容的提问来源于stack exchange,提问作者Alejandro Muñoz
相关产品推荐
相关产品推荐

